2つのセルを持つテーブルビューを作成しました。各セルにはあなたの上司とその両方の人が表示されます(あなたの場所に基づいています)。私はCLGeocoderを使用してユーザーの郵便番号を取得し、その値(文字列型)を関数外で宣言された変数に入れました。ユーザーの場所に基づいてデータを変更するにはどうすればよいですか?
理想的には、クラス内の別の関数に行き、その文字列変数(ユーザーの郵便番号を保持する)を使用して特定のデータを作成したいと考えています。しかし、それは動作しません! (私はプログラムを実行するときであれば条件で印刷機能が正常にターミナルで郵便番号を印刷していることに注意してください):ここでは
は、郵便番号を抽出し、VaRの郵便番号にそれを置くのコードです。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()関数内に置くと正常に動作しますが、後でプログラムでnames []を印刷すると、names [1] doesn更新された要素を含めません。 –
右しかし、 'reverseGeocode'は非同期関数なので、実行に若干の遅延があります。 if文を 'reverseGeocode'関数の直後に置くと、' reverseGeocode'がまだ動作しているので、ほぼ確実に ""なるでしょう。他の答えを見てください。 – creeperspeak