如何才能使nil兼容完成处理?

时间:2017-07-08 15:27:32

标签: swift closures

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

这是功能:

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

使用:

numberCheck(number: "77" , completion: {_ in
    //some task do here 
})

但我想留下完成块nil:

numberCheck(number: "77" ,  completion: nil)

但它给了我一个错误:

  

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

2 个答案:

答案 0 :(得分:4)

使闭包可选

func numberCheck(number: String , completion : @escaping ((Bool)->())?){

或为了更好的可读性

typealias CheckResult = (Bool)->()

func numberCheck(number: String , completion : @escaping CheckResult? ){

但是你必须在函数体中写入

completion?(true)

答案 1 :(得分:1)

只需使您的闭包参数可选,如:

func numberCheck(number: String, completion: @escaping ((Bool)->())?)

此外,您可以设置默认值,如:

func numberCheck(number: String, completion: @escaping ((Bool)->())? = nil)

通过这种方式,您可以在不通知nil completion参数的情况下进行调用,只需:

numberCheck(number: "123")