我用完成处理程序创建了一个函数。有时候我需要使用完成块,有时候不需要。
这是功能:
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) - > ()'
答案 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")