Я создал табличное представление с 2 ячейками, каждая ячейка показывает оба сенатора (исходя из вашего местоположения). Я использовал CLGeocoder, чтобы успешно захватить zipcode пользователя, и затем помещаю это значение (которое имеет строку типа) в переменную, объявленную вне функции.Как можно изменить данные на основе местоположения пользователя?
В идеале я хочу перейти к другой функции в классе и использовать эту строковую переменную (которая должна содержать почтовый индекс пользователя) для создания определенных данных. Однако это не сработает!
Вот код, который извлекает почтовый индекс и помещает его в var zipCode: (обратите внимание, что функция печати в условии if успешно печатает почтовый индекс в терминале при запуске программы).
let locationManager = CLLocationManager()
var zipcode: String = ""
func getTableInfo() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers
locationManager.requestWhenInUseAuthorization()
locationManager.startMonitoringSignificantLocationChanges()
CLGeocoder().reverseGeocodeLocation(locationManager.location!, completionHandler: {(placemarks, error) -> Void in
if error != nil {
print("Reverse geocoder failed with error" + error!.localizedDescription)
}
if placemarks!.count > 0 {
let pm = placemarks![0]
self.zipcode = pm.postalCode!
print(self.zipcode)
}
else {
print("Problem with the data received from geocoder")
}
})
}
Я называю эту функцию в viewDidLoad()
, а затем в функции viewDidLoad()
, используя условный оператор, я пытаюсь использовать почтовый индекс, чтобы изменить массив строк. names[]
объявлен как пустой массив строк прямо над функцией viewDidLoad()
.
if zipcode == "94108" {
names[1] = "WORKS!"
print(names)
}
По какой-то причине он не печатает имена! (Обратите внимание, что почтовый индекс действительно 94108, потому что 94108 - это то, что печатает на консоли, когда я прошу распечатать «zipcode»)
Где вы выполняя свой ', если почтовый индекс == Заявление «94108»? Вы уверены, что функция CLGeocoder еще не закончена? – creeperspeak
Он успешно работает, когда помещается в функцию CLGeocoder(), но проблема в том, что когда я печатаю имена [] позже в своей программе, имена [1] не выполняются Включить обновленный элемент. –
Право - но 'reverseGeocode' является асинхронной функцией, поэтому есть небольшая задержка в выполнении. Если вы положите оператор if сразу после того, как функция 'reverseGeocode' будет почти наверняка останова, поскольку' reverseGeocode' все еще работает. См. Другие ответы. – creeperspeak