I'll make function of returning address String. But below function return empty String of "".
How make return address function?
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"
yes, this function always return empty string, coz CLGeocoder().reverseGeocodeLocation(location)
take time to get address from Location and at same time your return str!
also execute so you get empty string.
use closure to get address from location.
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)
}
}
Usage
convertToPlaceMark(location) { (address) in
if let address = address {
print(address)
}
}