如何制作与 nil 兼容的完成处理程序?

cri*_*ka3 3 closures swift

我创建了一个带有完成处理程序的函数。有时我需要使用完成块,有时不需要。

这是函数:

func numberCheck(number: String , completion : @escaping (Bool)->()){
     //some task do here 
    completion(true)
}
Run Code Online (Sandbox Code Playgroud)

用:

numberCheck(number: "77" , completion: {_ in
    //some task do here 
})
Run Code Online (Sandbox Code Playgroud)

但我想让它完成块为零:

numberCheck(number: "77" ,  completion: nil)
Run Code Online (Sandbox Code Playgroud)

但它给了我一个错误:

Nil 与预期的参数类型 '(Bool) -> ()' 不兼容

vad*_*ian 7

使关闭可选

func numberCheck(number: String , completion : @escaping ((Bool)->())?){
Run Code Online (Sandbox Code Playgroud)

或者为了更好的可读性

typealias CheckResult = (Bool)->()

func numberCheck(number: String , completion : @escaping CheckResult? ){
Run Code Online (Sandbox Code Playgroud)

但是你必须在函数体中写

completion?(true)
Run Code Online (Sandbox Code Playgroud)

  • @cristainlika3 [Swift 编程语言](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/) (2认同)