如何在Swift中创建一个可选的完成处理程序?

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)

我不需要在完成块中。需要我叫它

ppa*_*ica 5

您可以将其设为可选参数,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)