我用2個單元格創建了一個tableview,每個單元格顯示兩個參議員(基於您的位置)。我使用CLGeocoder成功獲取用戶的郵政編碼,然後將該值(字符串類型)放入聲明爲該函數外部的變量中。如何根據用戶的位置更改數據?
理想情況下,我想在類中使用不同的函數,並使用該字符串變量(應該保存用戶的郵政編碼)來創建特定數據。但是,它不起作用!
下面是提取郵政編碼並將其置於var zipCode中的代碼:(注意,當我運行程序時,if條件中的打印功能成功地在終端中輸出郵政編碼)。
let locationManager = CLLocationManager()
var zipcode: String = ""
func getTableInfo() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers
locationManager.requestWhenInUseAuthorization()
locationManager.startMonitoringSignificantLocationChanges()
CLGeocoder().reverseGeocodeLocation(locationManager.location!, completionHandler: {(placemarks, error) -> Void in
if error != nil {
print("Reverse geocoder failed with error" + error!.localizedDescription)
}
if placemarks!.count > 0 {
let pm = placemarks![0]
self.zipcode = pm.postalCode!
print(self.zipcode)
}
else {
print("Problem with the data received from geocoder")
}
})
}
我調用這個函數在viewDidLoad()
,然後在viewDidLoad()
功能,使用if語句,我嘗試使用郵政編碼來改變一個字符串數組。 names[]
被聲明爲viewDidLoad()
函數正上方的空字符串數組。
if zipcode == "94108" {
names[1] = "WORKS!"
print(names)
}
由於某種原因,它不打印名稱! (請注意,郵政編碼確實是94108,因爲當我要求打印'郵政編碼'時,94108就是在控制檯上打印的內容)
== 「94108」語句?您確定CLGeocoder函數已完成嗎? – creeperspeak
它在CLGeocoder()函數中成功工作,但問題是當我在程序中稍後打印名稱[]時,名稱[1]不會不包含更新後的元素。 –
正確 - 但'reverseGeocode'是一個異步函數,所以執行時會有一些延遲。如果你在你的'reverseGeocode' func之後立即放置你的if語句,它幾乎肯定仍然是「」,因爲'reverseGeocode'仍然在運行。查看其他答案。 – creeperspeak