Spa*_*Dog 2 closures optional swift
我在课堂上经常使用这个方案
typealias nullHandle = ()->Void
var runOnLoad: nullHandle?
Run Code Online (Sandbox Code Playgroud)
因此,当我创建该类的实例时,我会...
let object = MyClass()
object.runOnLoad = { ()->Void in
// do something
}
Run Code Online (Sandbox Code Playgroud)
在类内部,我总是必须在运行该闭包之前执行此操作:
if self.runOnLoad != nil {
self.runOnLoad()!
}
Run Code Online (Sandbox Code Playgroud)
因为我不能保证它runOnLoad不是nil,如果我尝试运行nil runOnLoad,它将崩溃。
在使用Objective-C编程一个世纪之后,我是个新手。我正在迅速使用此模式,因为这是我在Objective-C中要做的。
在Swift中有没有更好的方法来完成这件事?
谢谢
可选的链接也可以与闭包一起使用:
self.runOnLoad?()
Run Code Online (Sandbox Code Playgroud)
如果不是nil,则执行闭包,否则不执行任何操作。
当然,您也可以测试闭包,但是最好使用可选绑定而不是强制展开:
if let runOnLoad = self.runOnLoad {
runOnLoad()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37 次 |
| 最近记录: |