Ios swift中具有多个参数的回调、完成处理程序
我在地图中的几个地方反转了地理代码,我想用一些常用的方法来包装它。我的出发点是:Ios swift中具有多个参数的回调、完成处理程序,ios,swift,Ios,Swift,我在地图中的几个地方反转了地理代码,我想用一些常用的方法来包装它。我的出发点是: func reverseGeocodeLocation(location: CLLocation, completion: (CLPlacemark) -> Void) { let geocoder = CLGeocoder() geocoder.reverseGeocodeLocation(location) { (placemarks, error) -> Void
func reverseGeocodeLocation(location: CLLocation, completion: (CLPlacemark) -> Void) {
let geocoder = CLGeocoder()
geocoder.reverseGeocodeLocation(location) {
(placemarks, error) -> Void in
// Check for returned placemarks
if let placemarks = placemarks where placemarks.count > 0 {
let topResult = placemarks[0] as! CLPlacemark
completion(topResult)
}
}
}
但是,如果我想在我的完成方法中添加另一个参数,该参数会将错误返回到我的视图,如下所示:
func reverseGeocodeLocation(location: CLLocation, completion: (CLPlacemark, NSError) -> Void) {
let geocoder = CLGeocoder()
geocoder.reverseGeocodeLocation(location) {
(placemarks, error) -> Void in
// Check for returned placemarks
if let placemarks = placemarks where placemarks.count > 0 {
let topResult = placemarks[0] as! CLPlacemark
completion(topResult, error)
}
}
}
如果错误为nil
,则我的完成(topResult,error)
将失败,因为错误为nil,访问错误。但是我不能这样做,因为参数与完成处理程序不匹配
if error != nil {
completion(topResult)
} else {
completion(...) // do something with the error
}
所以,如果我有一个nil错误,我将如何调用我的完成处理程序?谢谢。由于您拥有完成标题的定义,您可以使用可选的
NSError?
来正常定义它,因此它不会导致错误,并且需要展开。此外,CLGeocodeCompletionHandler
的最新定义还使用可选数组和错误:
typealias CLGeocodeCompletionHandler = ([CLPlacemark]?, NSError?) -> Void
由于您拥有完成标题的定义,您可以使用可选的
NSError?
来正常定义它,因此它不会导致错误,并且需要展开。此外,CLGeocodeCompletionHandler
的最新定义还使用可选数组和错误:
typealias CLGeocodeCompletionHandler = ([CLPlacemark]?, NSError?) -> Void
由于您拥有完成标题的定义,您可以使用可选的
NSError?
来正常定义它,因此它不会导致错误,并且需要展开。此外,CLGeocodeCompletionHandler
的最新定义还使用可选数组和错误:
typealias CLGeocodeCompletionHandler = ([CLPlacemark]?, NSError?) -> Void
由于您拥有完成标题的定义,您可以使用可选的
NSError?
来正常定义它,因此它不会导致错误,并且需要展开。此外,CLGeocodeCompletionHandler
的最新定义还使用可选数组和错误:
typealias CLGeocodeCompletionHandler = ([CLPlacemark]?, NSError?) -> Void
我认为在这种情况下,错误应该是可选的?另外,geocoder.reverseGeocodeLocation方法的完整签名是什么?我认为在这种情况下,错误应该是可选的?另外,geocoder.reverseGeocodeLocation方法的完整签名是什么?我认为在这种情况下,错误应该是可选的?另外,geocoder.reverseGeocodeLocation方法的完整签名是什么?我认为在这种情况下,错误应该是可选的?还有,geocoder.reverseGeocodeLocation方法的完整签名是什么?如果没有错误,
completion(topResult,nil)
Yes,NSError,我还需要这样做吗?允许您在没有问题的情况下通过nil如果没有错误,我是否仍需要执行此操作:completion(topResult,nil)
Yes,NSError?允许您在没有问题的情况下通过nil如果没有错误,我是否仍需要执行此操作:completion(topResult,nil)
Yes,NSError?允许您在没有问题的情况下通过nil如果没有错误,我是否仍需要执行此操作:completion(topResult,nil)
Yes,NSError?允许您无问题通过nil