SWIFT - LocationManager цикл через несколько раз?

У меня есть функция locationManager для захвата текущего местоположения пользователей и публикации названия города и штата. У меня есть заявление на печать, чтобы я мог проверить в своей консоли, все ли работает правильно ... и это так. Тем не менее, он печатает расположение города 3 раза. Это на самом деле вызывает проблему в моем реальном приложении, но это выходит за рамки этого вопроса.

Моя функция заключается в следующем:

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()
        }
    }
}

Так что в моем принте (self.usersLocation) он будет напечатан в моей консоли три раза. Это нормально?

ОБНОВЛЕНИЕ, ЧТОБЫ ПОКАЗАТЬ

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
}

Ответы на вопрос(2)

Ваш ответ на вопрос