当前,我有一个完成处理程序:
open func Start(completion: (() -> Void)) { ... }
,但是在这种情况下,我必须始终调用completion
。
我怎样才能使它成为可选的,所以在某些方法中我将使用completion
块,而在另一些方法中,我将跳过它们而不添加到我的方法调用中?
例如,我想要与以下内容相同:
self.present(<#T##viewControllerToPresent: UIViewController##UIViewController#>, animated: <#T##Bool#>, completion: <#T##(() -> Void)?##(() -> Void)?##() -> Void#>)
我尝试过
open func Start(completion: (() -> Void)? = nil) { ... }
添加问号,但是在这种情况下,我必须调用一个可选的完成块
completion?()
我不能简单地打电话
start()
在完成块中不需要的位置。需要我叫它
答案 0 :(得分:4)
默认情况下,您可以将其设为具有nil
值的可选参数:
open func Start(completion: (() -> Void)! = nil) {
guard completion != nil else {
return
}
completion()
}
在其他方法中:
func foo() {
Start()
Start(completion: nil)
Start(completion: {
// some code
})
Start {
// some code
}
}
答案 1 :(得分:0)
您可以使用不是nil
的默认值,例如什么都不做的块
open func start(completion: @escaping (() -> Void) = {}) {
}
但是,我看不到致电completion?()
有什么问题。