Я все еще учусь кодировать, поэтому, пожалуйста, не стреляйте в меня за вопрос. Я попытался найти ответ, однако я не нашел ничего о переполнении стека, которое могло бы помочь, ни в нескольких моих книгах ...
Я использую Xcode 11.3. Я пытаюсь скопировать адресную переменную из обратной геолокации в глобальную переменную. Однако, поскольку функция использует защитные операторы и вложенные if, Xcode хочет, чтобы я помещал «self» перед моим синтаксисом, когда я пытаюсь назначить адрес. Это хорошо в том смысле, что он работает, однако, когда метод завершил работу, глобальная переменная пуста, и кажется, что значение адреса сохраняется только во время выполнения этого метода / процедуры.
Есть ли способ получить данные? в «глобальную переменную», а не в какой-то экземпляр работает внутри метода? Я добавил комментарии к основному коду, где я пытаюсь дать моей глобальной переменной содержимое адреса (номер улицы, название улицы и пригород).
Моя функция (метод):
// Uses MapKit Delegate
func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
//let center = getCenterLocation(for: theMapView)
let center = getCenterLocation(for: theMapView)
let geoCoder = CLGeocoder()
guard let previousLocation = self.previousLocation else { return }
guard center.distance(from: previousLocation) > 100 else { return }
self.previousLocation = center
// The next little bit is mainly error checking stuff
geoCoder.reverseGeocodeLocation(center) { [weak self] (placemarks, error) in
guard let self = self else { return }
if let _ = error {
//TODO: Show alert informing the user
self.myAlertToolbar()
return
}
guard let placemark = placemarks?.first else {
//TODO: Show an alert to the user
self.myAlertToolbar()
return
}
let streetNumber = placemark.subThoroughfare ?? ""
let streetName = placemark.thoroughfare ?? ""
let suburb = placemark.locality ?? ""
if streetName == "" {
DispatchQueue.main.async {
self.addressLabelOutlet.text = "\(suburb)"
}
} else {
DispatchQueue.main.async {
// I want to be able to assign the streetNumber streetName and suburb over to a
// global variable without using self.blahblahblah
self.addressLabelOutlet.text = "\(streetNumber) \(streetName), \(suburb)"
self.myGlobalAddressVariable = String(streetNumber) + streetName + ", " + suburb
print("Address is \(self.myGlobalAddressVariable)")
}
}
}
}