J. *_*Doe 0 completionhandler swift
当前,我有一个完成处理程序:
open func Start(completion: (() -> Void)) { ... }
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我必须始终致电completion。我怎样才能使它成为可选的,所以在某些方法中我将使用completion块,而在另一些方法中,我将跳过它们而不添加到我的方法调用中?
例如,我想要与以下内容相同:
self.present(<#T##viewControllerToPresent: UIViewController##UIViewController#>, animated: <#T##Bool#>, completion: <#T##(() -> Void)?##(() -> Void)?##() -> Void#>)
Run Code Online (Sandbox Code Playgroud)
我试过了
open func Start(completion: (() -> Void)? = nil) { ... }
Run Code Online (Sandbox Code Playgroud)
添加问号,但是在这种情况下,我必须调用可选的完成块
completion?()
Run Code Online (Sandbox Code Playgroud)
我不能简单地打电话
start()
Run Code Online (Sandbox Code Playgroud)
我不需要在完成块中。需要我叫它
您可以将其设为可选参数,nil默认情况下具有值:
open func Start(completion: (() -> Void)! = nil) {
guard completion != nil else {
return
}
completion()
}
Run Code Online (Sandbox Code Playgroud)
在其他方法中:
func foo() {
Start()
Start(completion: nil)
Start(completion: {
// some code
})
Start {
// some code
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |