【发布时间】:2016-11-15 06:41:49
【问题描述】:
A 类的初始化器将可选闭包作为参数:
class A {
var closure: ()?
init(closure: closure()?) {
self.closure = closure
self.closure()
}
}
我想传递一个带有参数的函数作为闭包:
class B {
let a = A(closure: action(1)) // This throws the error: Cannot convert value of type '()' to expected argument type '(() -> Void)?'
func action(_ i: Int) {
//...
}
}
类A 应该执行闭包action 和参数i。
我不确定如何正确编写此代码,请参阅上面代码注释中的错误。有什么需要改变的?
【问题讨论】:
-
首先,这不是一个函数类型,它是一个 void 可选。没有太大意义,但无论如何。您要查找的词是部分应用函数。
-
@ValentinRadu “你要找的词是部分应用函数”不,不是。
-
@matt 需要解释一下吗?您有一个部分应用的函数,其中所有参数都部分应用。许多语言都允许这样做,包括 Swift。
func (a:Int)() {}。如果使用它是否有意义,那是另一个问题。 -
@matt 我知道它在语义上不适合。这不再是部分的。尽管如此,它仍然使用相同的语言功能。想想最后一个参数是 void,它也调用了函数。