Я создал функцию класса, которая содержит замыкание, которое обращает координаты местоположения геокодирования в адресную строку. Сначала я написал это в диспетчере представлений, но мне нужно запустить этот код в нескольких местах.Функция возвращается до завершения кода в быстром
Моя проблема в том, что функция класса возвращает строку перед запуском закрытия, поэтому возвращаемая строка пуста. Как я могу это исправить? И есть ли лучшие способы организовать мой код, а не использовать функцию класса?
import CoreLocation
class LocationUtil: CLLocation {
class func getLocationAddress(location:CLLocation?) -> NSString {
var geocoder = CLGeocoder()
var addressString : String = ""
if location != nil {
geocoder.reverseGeocodeLocation(location, completionHandler: {(placemarks, error)->Void in
var placemark:CLPlacemark!
if error == nil && placemarks.count > 0 {
placemark = placemarks[0] as CLPlacemark
if placemark.subThoroughfare != nil {
addressString = placemark.subThoroughfare + " "
}
if placemark.thoroughfare != nil {
addressString = addressString + placemark.thoroughfare + ", "
}
if placemark.locality != nil {
addressString = addressString + placemark.locality + ", "
}
if placemark.administrativeArea != nil {
addressString = addressString + placemark.administrativeArea + " "
}
if placemark.postalCode != nil {
addressString = addressString + placemark.postalCode + " "
}
if placemark.country != nil {
addressString = addressString + placemark.country
}
}
println("Address in closure: \(addressString)") //prints addresss
})
}
println("Address out of closure: \(addressString)") // doesn't print address
return addressString //this returns nothing
}
}
Спасибо, я смог следить за этим и заставить его работать! Все еще работаю через мой ментальный блок, полностью понимая закрытие. –
Забавно, что вы должны сказать, что у вас есть ментальный «блок» для замыканий .. доводчики по существу похожи на «блоки» от ObjC – lukya