我将执行返回地址字符串的功能。但是下面的函数返回空字符串“”。
如何使回信地址起作用?
let defaultLocation = CLLocation(latitude: 35.17944, longitude: 129.07556)
func convertToPlaceMark(_ location: CLLocation, data: Any?) -> String {
var str: String? = ""
CLGeocoder().reverseGeocodeLocation(location) {
places,err in
if err != nil {
print("geocoder error")
return
}
let placeMark1: CLPlacemark? = places!.last
if placeMark1 != nil {
str = placeMark1?.name // "1001 Jungang-daero\n" <--- I need function that return this value
print(str!)
}
}
return str!
}
print(convertToPlaceMark(defaultLocation, data: nil)) // "\n"
是,此函数总是返回空字符串,因为CLGeocoder().reverseGeocodeLocation(location)
需要时间才能从位置获取地址,同时return str!
也将执行,因此您将获得空字符串。
使用闭包从位置获取地址。
尝试一下:
let defaultLocation = CLLocation(latitude: 35.17944, longitude: 129.07556)
func convertToPlaceMark(_ location: CLLocation, data: Any?) -> String {
var str: String? = ""
CLGeocoder().reverseGeocodeLocation(location) {
places,err in
if err != nil {
print("geocoder error")
return
}
let placeMark1: CLPlacemark? = places!.last
if placeMark1 != nil {
str = placeMark1?.name // "1001 Jungang-daero\n" <--- I need function that return this value
return str!
}
}
}
print(convertToPlaceMark(defaultLocation, data: nil)) // "\n"