我在课堂上经常使用这个方案
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/