如何做一个可选的快速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 */ })
我们也可以使用尾随闭包语法来将onReject
parameter passingonReject
函数:
then({ /* on fulfilled */ }) { // ... on reject }
这是一篇关于它的博客文章 。
由于我认为,这个“可选”闭包应该什么也不做,你可以使用一个空的闭包参数作为默认值:
func then(onFulfilled: ()->(), onReject: ()->() = {}){ // now you can call your closures onFulfilled() onReject() }
现在可以使用或不使用onReject
callback来调用此函数
then({ ... }) then({ ... }, onReject: { ... })
不需要Swift的真棒Optionals?
这里!
也许这是一个更清洁的方式。 特别是当闭包有复杂的参数时。
typealias SimpleCallBack = () -> () class Promise { func then(onFulfilled: SimpleCallBack, onReject: SimpleCallBack?){ if let callableRjector = onReject { // do stuff! } } }