具有nil值的完成处理程序

时间:2017-12-21 10:20:33

标签: ios swift

我想用完成处理程序创建一个函数,我想创建处理程序,所以我可以传入nil。

func animate(completion: @escaping((Bool) -> ()) {
  //Do stuff
  completion(true)
}

我想让make完成处理程序能够在不需要时传递nil,例如:

animate(completion: nil)

它没有工作&我收到错误:

  

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

。你能帮帮我怎么做吗?

1 个答案:

答案 0 :(得分:-1)

删除@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)")
}