Swift 中的完成处理程序需要奇数下划线字符
Completion handler in Swift requires odd underscore characters
我刚刚创建了一个带有完成处理程序的方法。我无法编译我的应用程序,除非我像这样在我的方法中添加烦人的下划线字符:
func searchForLocation(name: String, completion: @escaping (_ results: Array<Any>, _ error: NSError) -> ()) { }
为什么我只能将我的方法定义为:
func searchForLocation(name: String, completion: @escaping (results: Array<Any>, error: NSError) -> ()) { }
这当然没有意义,因为 Apple 能够创建自己的完成处理程序而没有烦人的下划线字符,例如:
open func dataTask(with url: URL, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Swift.Void) -> URLSessionDataTask
只需将您的函数声明更改为:
func searchForLocation(name: String, completion: @escaping (Array<Any>, NSError) -> ()) { ... }
这是因为,您不能在闭包中使用 named
参数。
我刚刚创建了一个带有完成处理程序的方法。我无法编译我的应用程序,除非我像这样在我的方法中添加烦人的下划线字符:
func searchForLocation(name: String, completion: @escaping (_ results: Array<Any>, _ error: NSError) -> ()) { }
为什么我只能将我的方法定义为:
func searchForLocation(name: String, completion: @escaping (results: Array<Any>, error: NSError) -> ()) { }
这当然没有意义,因为 Apple 能够创建自己的完成处理程序而没有烦人的下划线字符,例如:
open func dataTask(with url: URL, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Swift.Void) -> URLSessionDataTask
只需将您的函数声明更改为:
func searchForLocation(name: String, completion: @escaping (Array<Any>, NSError) -> ()) { ... }
这是因为,您不能在闭包中使用 named
参数。