有没有办法 运行 闭包而不测试它?

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()
}