Хорошо, я не понимаю. Я написал код для прямого геокодирования, у меня есть UITextField, который вы пишете имя города, и после нажатия кнопки ввода его отклоняют, и в то же время вызывается функция, чтобы определить, содержит ли UITextField допустимый ввод. Если есть ошибка, она сохраняется в переменной bool, значение которой изменяется в функции. У меня есть инструкции печати по всему месту, и с выхода на консоли я вижу, что функция запускается после условия if, но она вызывается раньше ... что? Может кто-нибудь объяснить мне, что происходит? Код:Функция запускается после блока кода, даже если она вызывается до
var locationError: Bool?
func textFieldShouldReturn(textField: UITextField) -> Bool {
self.view.endEditing(true)
forwardGeocoding(textField.text!)
print("forward geocoding ran 1st time")
print(locationError)
if locationError == true {
print("Error")
} else if locationError == false {
print("Success")
} else if locationError == nil {
print("No value for locationError")
}
return false
}
func forwardGeocoding(address: String) -> CLLocation? {
var userLocation: CLLocation?
CLGeocoder().geocodeAddressString(address, completionHandler: { (placemarks, error) in
if error != nil {
print("Geocoding error: \(error)")
self.locationError = true
return
}
if placemarks?.count > 0 {
print("Placemark found")
self.locationError = false
let placemark = placemarks?.first
let location = placemark?.location
let coordinate = location?.coordinate
print("Settings location: \(coordinate!.latitude), \(coordinate!.longitude)")
if let unwrappedCoordinate = coordinate {
let CLReadyLocation: CLLocation = CLLocation(latitude: unwrappedCoordinate.latitude, longitude: unwrappedCoordinate.longitude)
userLocation = CLReadyLocation
}
}
})
return userLocation
}
Консоль вывода:
forward geocoding ran 1st time
nil
No value for locationError
Placemark found
Settings location: 48.8567879, 2.3510768
Это часть догадки с моей стороны, но я думаю, причина в том, что это происходит потому, что код в функции находится в замыкании, что заставляет его работать асинхронно с остальной частью кода. Попробуйте помещать печать над переменной userLocation в функции и посмотреть, что произойдет. –
Что такое «метки»? Это массив? – Dershowitz123