In a model's class Location, I get the name of the current city: 
var currentLatitude: Double!
var currentLongitude: Double!
var currentLocation: String!
var currentCity: String!
func getLocationName() {
    let geoCoder = CLGeocoder()
    let location = CLLocation(latitude: currentLatitude, longitude: currentLongitude)
    geoCoder.reverseGeocodeLocation(location, completionHandler: { placemarks, error in
        guard let addressDict = placemarks?[0].addressDictionary else {
            return
        }
        if let city = addressDict["City"] as? String {
            self.currentCity = city
            print(city)
        }
        if let zip = addressDict["ZIP"] as? String {
            print(zip)
        }
        if let country = addressDict["Country"] as? String {
            print(country)
        }
        self.nowUpdateUI()
    })
}
In view controller I want to update the UI and update my label to show the current city. 
However, self.currentCity = city happens inside of a closure. So if I just run a func in view controller: 
func updateUI() {
        cityLbl.text = Location.sharedInstance.currentCity
}
- I'm not getting anywhere because the closure haven't finished running. 
I've been advised to add a completion handler to getLocationName()and inside of it, perform the call to a func that will update the UI. However, from all the tutorials out there on closures, completion handlers, it is not clear to me how to achieve that. How to construct a completion handler, pass it as an arg togetLocationName()and how to callgetLocationNamefrom view controller?
 
     
     
     
    