Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios swift中具有多个参数的回调、完成处理程序_Ios_Swift - Fatal编程技术网

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