如何实现返回地址的功能,而不仅仅是获取地址?
How make function of returning address, but not only getting address?
我将使用 returning 地址字符串。
但是下面的函数 return 是“”的空字符串。
如何实现return地址功能?
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"
是的,这个函数总是 return 空字符串,因为 CLGeocoder().reverseGeocodeLocation(location)
需要时间从 Location 获取地址,同时你的 return str!
也会执行所以你得到空字符串。
使用闭包从位置获取地址。
func convertToPlaceMark(_ location: CLLocation, _ handler: @escaping ((String?) -> Void)) {
CLGeocoder().reverseGeocodeLocation(location) {
places,err in
if err != nil {
print("geocoder error")
handler(nil)
return
}
let placeMark1: CLPlacemark? = places!.last
handler(placeMark1?.name)
}
}
用法
convertToPlaceMark(location) { (address) in
if let address = address {
print(address)
}
}
我将使用 returning 地址字符串。 但是下面的函数 return 是“”的空字符串。
如何实现return地址功能?
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"
是的,这个函数总是 return 空字符串,因为 CLGeocoder().reverseGeocodeLocation(location)
需要时间从 Location 获取地址,同时你的 return str!
也会执行所以你得到空字符串。
使用闭包从位置获取地址。
func convertToPlaceMark(_ location: CLLocation, _ handler: @escaping ((String?) -> Void)) {
CLGeocoder().reverseGeocodeLocation(location) {
places,err in
if err != nil {
print("geocoder error")
handler(nil)
return
}
let placeMark1: CLPlacemark? = places!.last
handler(placeMark1?.name)
}
}
用法
convertToPlaceMark(location) { (address) in
if let address = address {
print(address)
}
}