gpt4 book ai didi

ios - Swift 中的回调、带有多个参数的完成处理程序

转载 作者:行者123 更新时间:2023-11-29 01:53:26 32 4
gpt4 key购买 nike

我在我的 map 中的几个地方进行了反向地理编码,我想将其包装成一些常用方法。我所拥有的是一个可行的起点:

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)
}
}
}

但是,如果我想向我的完成方法添加另一个参数,它将错误返回到我的 View ,如下所示:

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)
}
}
}

如果 error 为 nil,那么我的 completion(topResult, error) 将失败,因为 error 为 nil 且访问错误。但我不能这样做,因为参数与完成处理程序不匹配。

if error != nil {
completion(topResult)
} else {
completion(...) // do something with the error
}

所以如果我有一个 nil 错误,我将如何调用我的完成处理程序?

最佳答案

由于您自己定义了完成 header ,因此您可以使用可选的 NSError? 正常定义它,因此它不会导致错误并且需要展开。此外,CLGeocodeCompletionHandler 的最新定义还使用了可选数组和错误:

typealias CLGeocodeCompletionHandler = ([CLPlacemark]?, NSError?) -> Void

关于ios - Swift 中的回调、带有多个参数的完成处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31153066/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com