我试图在Swift中声明一个带可选闭包的参数。我声明的函数如下所示:
class Promise {
func then(onFulfilled: ()->(), onReject: ()->()?){
if let callableRjector = onReject {
// do stuff!
}
}
}
但Swift抱怨“条件中的绑定值必须是可选类型”,其中声明了"if let“。
发布于 2014-06-25 04:46:00
您应该将可选的闭包放在括号中。这将正确地确定?
操作符的作用域。
func then(onFulfilled: ()->(), onReject: (()->())?){
if let callableRjector = onReject {
// do stuff!
}
}
发布于 2014-07-27 13:03:58
为了使代码更简短,我们可以使用nil
作为onReject
参数的默认值,并在调用它时使用可选的链接?()
:
func then(onFulfilled: ()->(), onReject: (()->())? = nil) {
onReject?()
}
这样,当我们调用then
函数时,就可以省略onReject
参数。
then({ /* on fulfilled */ })
我们还可以使用尾部闭包语法将onReject
参数传递给then
函数:
then({ /* on fulfilled */ }) {
// ... on reject
}
这里有一个关于它的blog post。
发布于 2014-10-09 17:14:55
因为我假设这个“可选的”闭包应该什么也不做,所以您可以使用一个带有空闭包的参数作为默认值:
func then(onFulfilled: ()->(), onReject: ()->() = {}){
// now you can call your closures
onFulfilled()
onReject()
}
现在可以使用或不使用onReject
回调来调用此函数
then({ ... })
then({ ... }, onReject: { ... })
这里不需要斯威夫特很棒的Optionals?
!
https://stackoverflow.com/questions/24395853
复制相似问题