【发布时间】:2020-04-25 16:42:20
【问题描述】:
所以我调用的函数应该只返回输入地址的经度。我将它附加在这里,以便您查看它,然后我将在代码之后对其进行评论:
func getLongitude(address: String) -> Double {
var longitude: Double = 0.0
let geocoder = CLGeocoder()
geocoder.geocodeAddressString(address) {
placemarks, error in
let placemark = placemarks?.first
longitude = placemark?.location?.coordinate.longitude ?? 0.0
print("The testing longitude is \(longitude)")
}
return longitude
}
如您所见,我用默认值 0.0 声明了经度变量。在函数内部的闭包中,我更新了经度。 print 语句确认在该函数的闭包中更新了经度。当在此闭包之外使用 return 语句访问经度时,它会再次返回 0.0 (我相信经度的值在闭包之外没有发生变化,但我不知道如何解决这个问题)。任何帮助将不胜感激!
【问题讨论】:
-
嗨,马特,我在这里遇到了一个小问题。所以 getLongitude 函数必须返回一个双精度值。但是我使用的内置函数 gecodeAddressString 使用了一个返回类型为 void 的回调函数。 geocodeAddressString 回调函数的返回类型为 void 时,如何返回?
-
重读文章!你不能返回双倍。您需要重写您的
getLongitude,以便 it 采用 a 完成处理程序 采用双精度。在geocodeAddressString完成处理程序中,您调用该完成处理程序,并将其传递给 double。