SWIFT - LocationManager wiederholt durchlaufen?

Ich habe eine locationManager-Funktion, um den aktuellen Standort des Benutzers zu ermitteln und den Namen der Stadt und des Staates zu veröffentlichen. Ich habe eine print-Anweisung, mit der ich in meiner Konsole überprüfen kann, ob alles ordnungsgemäß funktioniert. Der Standort der Stadt wird jedoch dreimal gedruckt. Dies verursacht tatsächlich ein Problem in meiner eigentlichen App, das jedoch über den Punkt dieser Frage hinausgeht.

Meine Funktion ist wie folgt:

var usersLocation: String!

var locationManager: CLLocationManager!

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

    let userLocation: CLLocation = locations[0]


    CLGeocoder().reverseGeocodeLocation(userLocation) { (placemarks, error) -> Void in

        if error != nil {

            print(error)

        } else {

            let p = placemarks?.first // ".first" returns the first element in the collection, or nil if its empty
            // this code above will equal the first element in the placemarks array

            let city = p?.locality != nil ? p?.locality : ""
            let state = p?.administrativeArea != nil ? p?.administrativeArea : ""

            self.navigationBar.title = ("\(city!), \(state!)")
            self.usersLocation = ("\(city!), \(state!)")
            self.locationManager.stopUpdatingLocation()
            print(self.usersLocation)
            self.refreshPosts()
        }
    }
}

So wird in meinem Ausdruck (self.usersLocation) dreimal in meiner Konsole gedruckt. Ist das normal

UPDATE TO SHOW VIEWDIDLOAD

override func viewDidLoad() {
    super.viewDidLoad()

    locationManager = CLLocationManager()
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.requestWhenInUseAuthorization()
    locationManager.startUpdatingLocation()

    self.tableView.rowHeight = UITableViewAutomaticDimension
    self.tableView.estimatedRowHeight = 250.0
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage