Я передаю набор координат широты и долготы для обратного геокодирования. Обратное геокодирование работает, и я возвращаю свои данные адреса, но затем мне нужно создать URL-адрес из этих данных, что я делаю дальше. Я обнаружил, что NSURLSession выполняется до того, как я верну свои данные. Вы можете видеть, где я помещаю в println, чтобы отображать «первый» и «второй», но в выходной консоли, когда я выполняю этот код, отображается «второй», а затем «первый» вместе с адресными данными, что говорит мне, m не работает в порядке.Выполнение синхронного кода в Swift
Как я могу заставить порядок выполнения, требуя, чтобы моя переменная addchunk существовала до запуска NSURLSession?
Спасибо!
@IBAction func grabData(sender: UIButton) {
var latitude:CLLocationDegrees = (latitudeEntry.text as NSString).doubleValue
var longitude:CLLocationDegrees = (longitudeEntry.text as NSString).doubleValue
var location = CLLocation(latitude: latitude, longitude: longitude)
// reverse geocodes the supplied latitude and longitude
CLGeocoder().reverseGeocodeLocation(location, completionHandler: {
(placemarks, error) -> Void in
if error != nil {
println("Reverse geocoder failed with error" + error.localizedDescription)
}
if placemarks.count > 0 {
let pm = placemarks[0] as CLPlacemark
self.addchunk = "\(pm.subThoroughfare)-\(pm.thoroughfare),-\(pm.locality),-\(pm.administrativeArea)".lowercaseString
println("first " + self.addchunk)
} else {
println("Problem with the data received from geocoder")
}
})
var url = NSURL(string: "http://www.example.com/" + addchunk)
println("second " + addchunk)
if url != nil {
let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: {
(data, response, error) -> Void in
...
почему бы не перенести код URL-адрес в обработчик завершения обратного GeocodeLocation? – chris
Да, назовите этот код из 'completeHandler'. Мы можем показать вам, как сделать это синхронно (и, я уверен, кто-то будет), но это ужасный образец. Никогда не блокируйте основную очередь. Вызовите код, зависящий от результатов «reverseGeocodeLocation» из «completeHandler». – Rob
Спасибо, Крис и Роб! Хороший вопрос о том, чтобы не блокировать основную очередь. –