gpt4 book ai didi

ios - 如何使用默认值使闭包可选

转载 作者:搜寻专家 更新时间:2023-10-31 08:34:12 25 4
gpt4 key购买 nike

我有一堆函数,如果没有提供,我希望能够指定一个默认闭包。如果没有一些丑陋的代码,我似乎无法弄清楚该怎么做。

例如,我希望 perform 函数接受一个名为 closure 的可选参数,该参数在提供时执行。否则它将默认执行 myClosure。我怎样才能做得更好,这样我就不必重复函数调用?

class MyClas {

typealias closureType = ((number: Int) -> Int)?

func myClosure (number: Int) -> Int {
return number * 2
}

func perform(number: Int, closure: closureType = nil) -> Int {
if closure == nil {
return myClosure(number)
} else {
return closure!(number: number)
}

}
}

理想情况下,我可以做到这一点!

class MyClass {

typealias closureType = ((number: Int) -> Int)?

func myClosure (number: Int) -> Int {
return number * 2
}

func perform(number: Int, closure: closureType = myClosure) -> Int {
return closure(number: number)

}
}

最佳答案

你的问题是你已经使 myClosure 成为一个方法(或成员函数),这意味着它没有你想要的签名(它是一个柯里化(Currying)函数,类型为 MyClass->Int->Int).

要么将其从类中拉出,要么使其成为静态(或者更确切地说,在类的情况下为“类”)方法:

class MyClass {

typealias closureType = (number: Int) -> Int

class func myClosure (number: Int) -> Int {
return number * 2
}

func perform(number: Int, closure: closureType = MyClass.myClosure) -> Int {
return closure(number: number)

}
}

附言一旦你这样做了,它就不再需要是可选的了

只是为了展示它作为非静态方法编译:

class MyClass {

typealias closureType = MyClass -> (number: Int) -> Int

func myClosure (number: Int) -> Int {
return number * 2
}

func perform(number: Int, closure: closureType = myClosure) -> Int {
return closure(self)(number: number)

}
}

let c = MyClass()
println(c.perform(5)) // prints 10

关于ios - 如何使用默认值使闭包可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28508897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com