在模型的Location
類中調用函數求,我得到了當前城市名稱:如何在封閉
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()
})
}
在視圖控制器我想更新的用戶界面和更新我的標籤,以顯示當前市。 但是,self.currentCity = city
發生在封閉內部。所以,如果我只是運行在視圖控制器等FUNC:
func updateUI() {
cityLbl.text = Location.sharedInstance.currentCity
}
- 因爲封還沒有運行完畢,我沒有在任何地方獲得。 我建議添加一個完成處理程序到
getLocationName()
及其內部,執行對將更新UI的func的調用。 但是,從關閉,完成處理程序的所有教程中,我不清楚如何實現這一點。 如何構建完成處理程序,將其作爲參數傳遞給getLocationName()
以及如何從視圖控制器調用getLocationName
?
如果您有任何疑問,隨時提問。 –
是的,我還沒有流利的編程,你能否展示你提供的第二個選項的實現? (假設updateUI()是視圖控制器中的一個方法,而不是位於其中實現getLocationName的Location)。 –
@Mr_Vlasov所以你想在方法中使用'completionHandler'。你在使用Swift 3嗎? –