私はiOSの新機能ですので、私と一緒にお立ち寄りください。値を返す間にiOSでスレッディングが発生する
class ViewController: UIViewController, CLLocationManagerDelegate {
var locationManager = CLLocationManager()
var lat: Double! = 0.0
var long: Double! = 0.0
override func viewDidLoad() {
super.viewDidLoad()
self.findMyLocation()
print(self.lat)
print(self.long)
}
func findMyLocation() {
self.locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startMonitoringSignificantLocationChanges()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
locationManager.requestWhenInUseAuthorization()
// Here we start locating
locationManager.startUpdatingLocation()
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
for location in locations {
self.lat = location.coordinate.latitude
self.long = location.coordinate.longitude
}
locationManager.stopUpdatingLocation()
}
}
ここでは、私の単純なビューの私の現在位置の緯度と経度を取得し、ローカル変数に割り当てコントローラlat
とlong
だ、次いでprint
。上記のコードは、lat
とlong
の両方に常に0.0を出力します。これは、最初にprint(lat) print(long)
が実行され、その後にロケーションのフェッチが実行されるためです。私はこの問題を解決するためのいくつかの本当に簡単な方法があると確信していますが、私はこれを行う方法がわかりません。どんな助けもありがたい。私は壮大な中央派遣をしなければならないと仮定しています。私が何を見ているべきかを提案してください。
また、私はNSLocationWhenInUseUsageDescription
からinfo.plist
を追加しました。
はい。私はその部分を知っています。私の質問は、私が場所を取得し、viewDidLoadでそれを印刷するのを待つ方法があるかどうかです。 – golldy
いいえ、印刷する前に、ロケーションマネージャから座標を取得する必要があります。 –
ロケーションマネージャが取得した位置座標を取得するための補完ハンドラがありませんか? – golldy