我用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