有没有办法 运行 闭包而不测试它?
Is there a way to run a closure without testing it?
我在 classes
中经常使用这个方案
typealias nullHandle = ()->Void
var runOnLoad: nullHandle?
所以,当我创建 class 的实例时,我会...
let object = MyClass()
object.runOnLoad = { ()->Void in
// do something
}
在 class 内部,我总是必须在 运行 闭包之前执行此操作:
if self.runOnLoad != nil {
self.runOnLoad()!
}
因为我不能保证 runOnLoad
不为零,如果我尝试 运行 为零 runOnLoad
它会崩溃。
我在Objective-C编程了一个世纪后才接触swift。我在 swift 中使用此模式,因为这是我在 Objective-C.
中要做的
在 Swift 中是否有更好的方法来完成这一切?
谢谢
Optional chaining 也适用于闭包:
self.runOnLoad?()
如果不是 nil
则执行闭包,否则什么都不做。
当然你也可以测试闭包,但是最好使用可选绑定而不是强制展开:
if let runOnLoad = self.runOnLoad {
runOnLoad()
}
我在 classes
中经常使用这个方案typealias nullHandle = ()->Void
var runOnLoad: nullHandle?
所以,当我创建 class 的实例时,我会...
let object = MyClass()
object.runOnLoad = { ()->Void in
// do something
}
在 class 内部,我总是必须在 运行 闭包之前执行此操作:
if self.runOnLoad != nil {
self.runOnLoad()!
}
因为我不能保证 runOnLoad
不为零,如果我尝试 运行 为零 runOnLoad
它会崩溃。
我在Objective-C编程了一个世纪后才接触swift。我在 swift 中使用此模式,因为这是我在 Objective-C.
中要做的在 Swift 中是否有更好的方法来完成这一切?
谢谢
Optional chaining 也适用于闭包:
self.runOnLoad?()
如果不是 nil
则执行闭包,否则什么都不做。
当然你也可以测试闭包,但是最好使用可选绑定而不是强制展开:
if let runOnLoad = self.runOnLoad {
runOnLoad()
}