以下代码是 Xcode Playground 中的简化版本
typealias AppStateDeeplinkAction = () -> ()
var deeplinkBlock : AppStateDeeplinkAction? = {
print ("this is for deeplink")
}
func deeplinkAction() {
if let deeplinkAction = deeplinkBlock {
print("deeplink is executed")
deeplinkAction() // <- if this is commented out, the result is just "deeplink is executed"
}
}
deeplinkAction()
这样做的结果是,
deeplink is executed
this is for deeplink
令人困惑的是,在 if-let 中调用了 deeplinkAction() 函数,并且没有编译/运行时错误。它成功地结束了。我不太明白的是 deeplinkAction() 的递归调用。
与此相比,如果将 deeplinkAction() 注释掉,结果只是
deeplink is executed
我错过了什么样的“关闭”功能?我该如何解释这个?