我在课堂上经常使用这个方案

typealias nullHandle = ()->Void
var runOnLoad: nullHandle?

所以,当我创建该类的实例时,我会……
let object = MyClass()
object.runOnLoad = { ()->Void in
  // do something
}

在这个类中,在运行这个闭包之前,我总是必须这样做:
if self.runOnLoad != nil {
  self.runOnLoad()!
}

因为我不能保证runOnLoad不是nil,如果我尝试运行nil,它将崩溃。
我是在Objective-C中编程一个世纪后才接触到Swift的。我在swift中使用这个模式,因为这是我在objective-c中要做的。
有没有更好的方法来快速完成整个事情?
谢谢

最佳答案

Optional chaining也适用于关闭:

self.runOnLoad?()

如果不是,则执行关闭,否则不执行任何操作。
当然,您也可以测试闭包,但最好使用可选绑定,而不是强制展开:
if let runOnLoad = self.runOnLoad {
    runOnLoad()
}

关于swift - 有没有办法在没有测试的情况下运行闭包?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57648297/

10-10 16:35