gpt4 book ai didi

ios - 从 Swift 中的回调返回对象

转载 作者:可可西里 更新时间:2023-11-01 00:23:48 25 4
gpt4 key购买 nike

我想用其他逻辑将 geocoder.geocodeAddressString 包装在另一个方法中。

public func placemarkForSearchResult<T>(searchResult: T) -> CLPlacemark? {
if let searchResult = searchResult as? String {
let geocoder = CLGeocoder()
geocoder.geocodeAddressString(searchResult, completionHandler: {
(placemarks, error) -> Void in

// Check for returned placemarks
if let placemarks = placemarks where placemarks.count > 0 {
return placemarks[0] as! CLPlacemark // CLPlacemark is not convertible to void error message
}
return nil // Typd Void does not conform to protocol NilLiteralConvertible
})
}
}

我在这个方法中有一些其他的逻辑并不真正相关,但我想知道我如何处理这样的情况,我想返回一个 CLPlacemark,但不能因为地理编码器的 completionHandler 返回 Void。我无法更改地理编码器回调的 Void 参数。

这可能吗?还是我坚持调用使用从地理编码器找到的 CLPlacemark 的委托(delegate)方法?

最佳答案

您永远无法从 placemarkForSearchResult 函数返回地标,因为获取地标需要使用异步 函数 (geocodeAddressString)。到那个函数完成并回调到您的完成处理程序时,您的 placemarkForSearchResult 早就完成并返回了!

您需要一种与所调用函数的异步性质兼容的策略。您需要 placemarkForSearchResult接受回调函数参数,而不是从 placemarkForSearchResult 返回地标。当完成处理程序中有地标时,您调用那个回调函数。如果该回调函数(巧妙地)设计为接受地标参数,那么您现在就是将该地标传递给首先调用您的人。

关于ios - 从 Swift 中的回调返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31064592/

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