Ios 具有nil值的完成处理程序

Ios 具有nil值的完成处理程序,ios,swift,Ios,Swift,我想创建一个带有完成处理程序的函数,我想创建一个处理程序,以便传入nil func animate(completion: @escaping((Bool) -> ()) { //Do stuff completion(true) } 我希望使make完成处理程序能够在不需要时传入nil,例如: animate(completion: nil) 它不工作&我得到错误信息: Nil与预期的参数类型(Bool?->)()不兼容 。你能帮我怎么做吗?删除@escaping关键字,并通

我想创建一个带有完成处理程序的函数,我想创建一个处理程序,以便传入nil

func animate(completion: @escaping((Bool) -> ()) {
  //Do stuff
  completion(true)
}
我希望使make完成处理程序能够在不需要时传入nil,例如:

animate(completion: nil)
它不工作&我得到错误信息:

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


。你能帮我怎么做吗?

删除
@escaping
关键字,并通过指定默认值使闭包成为可选的。注意,这种方式实际上保留了可选闭包的转义

func animate(_ completion: ((Bool) -> ())? = nil) {
    //Do stuff
    completion?(true)
}
可能的用法:

animate({ value in
    print("Completion value: \(value)")
})
animate(nil)
animate() // pass nothing, because default value is nil
作为尾随关闭:

animate() { value in
    print("Completion value: \(value)")
}

函数参数swift中的闭包可以被视为任何其他参数类型,因此可以成为可选的。