【发布时间】:2021-08-10 21:20:21
【问题描述】:
我有一个必须返回计算值的函数,问题是返回的值是在函数开头初始化的值。函数的一部分是异步的,所以这部分在函数返回值之前没有时间执行。
我不知道如何等待代码的异步部分。
所以代码的异步部分中的打印返回正确的值,但是在返回之前的打印,返回一个使用变量placeMarkCoordinates变量的初始化值计算的值,该变量还没有来得及修改。
func getDistance(placeMarkLocation: MKLocalSearchCompletion, currentLocation: CLLocation) -> String {
let searchRequest = MKLocalSearch.Request(completion: placeMarkLocation)
let search = MKLocalSearch(request: searchRequest)
var placeMarkCoordinates: CLLocation = CLLocation(latitude: 0, longitude: 0)
// Asynchronous part:
search.start { (response, error) in
guard let coordinate = response?.mapItems[0].placemark.coordinate else {
return
}
placeMarkCoordinates = CLLocation(latitude: coordinate.latitude, longitude: coordinate.longitude)
print(currentLocation.distance(from: placeMarkCoordinates))
}
print(currentLocation.distance(from: placeMarkCoordinates))
return "\(currentLocation.distance(from: placeMarkCoordinates).getDistanceString)"
}
【问题讨论】:
-
您无需等待。您不能返回异步提供的值,因为您在提供值之前返回;这就是异步的意思。
标签: swift asynchronous