如何做一个可选的快速closures?
我试图在Swift中声明一个参数,它带有一个可选的闭包。 我已经声明的function如下所示:
class Promise { func then(onFulfilled: ()->(), onReject: ()->()?){ if let callableRjector = onReject { // do stuff! } } } 但是Swift抱怨说:“在条件中的绑定值必须是一个可选types”,其中声明了“if let”。
 您应该将可选闭包括在括号内。 这将适当的范围? 运营商。 
 func then(onFulfilled: ()->(), onReject: (()->())?){ if let callableRjector = onReject { // do stuff! } } 
 为了使代码更短,我们可以使用nil作为默认值onReject参数和可选的链接?()时调用它: 
 func then(onFulfilled: ()->(), onReject: (()->())? = nil) { onReject?() } 
 这样我们就可以在调用函数的时候省略onReject参数。 
 then({ /* on fulfilled */ }) 
 我们也可以使用尾随闭包语法来将onRejectparameter passingonReject函数: 
 then({ /* on fulfilled */ }) { // ... on reject } 
这是一篇关于它的博客文章 。
由于我认为,这个“可选”闭包应该什么也不做,你可以使用一个空的闭包参数作为默认值:
 func then(onFulfilled: ()->(), onReject: ()->() = {}){ // now you can call your closures onFulfilled() onReject() } 
 现在可以使用或不使用onRejectcallback来调用此函数 
 then({ ... }) then({ ... }, onReject: { ... }) 
 不需要Swift的真棒Optionals? 这里! 
也许这是一个更清洁的方式。 特别是当闭包有复杂的参数时。
 typealias SimpleCallBack = () -> () class Promise { func then(onFulfilled: SimpleCallBack, onReject: SimpleCallBack?){ if let callableRjector = onReject { // do stuff! } } }