Попытка присвоить значение глобальной переменной внутри метода с помощью Guards & IFs - PullRequest
0 голосов
/ 19 января 2020

Я все еще учусь кодировать, поэтому, пожалуйста, не стреляйте в меня за вопрос. Я попытался найти ответ, однако я не нашел ничего о переполнении стека, которое могло бы помочь, ни в нескольких моих книгах ...

Я использую 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)")
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...