1

私は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() 
    } 
} 

ここでは、私の単純なビューの私の現在位置の緯度と経度を取得し、ローカル変数に割り当てコントローラlatlongだ、次いでprint。上記のコードは、latlongの両方に常に0.0を出力します。これは、最初にprint(lat) print(long)が実行され、その後にロケーションのフェッチが実行されるためです。私はこの問題を解決するためのいくつかの本当に簡単な方法があると確信していますが、私はこれを行う方法がわかりません。どんな助けもありがたい。私は壮大な中央派遣をしなければならないと仮定しています。私が何を見ているべきかを提案してください。

また、私はNSLocationWhenInUseUsageDescriptionからinfo.plistを追加しました。

答えて

0

位置マネージャが見つけた座標だけを印刷することができます。機能はlocationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])です。
ロケーションマネージャに座標がまだない場合は、viewDidLoadに印刷してみます。

+0

はい。私はその部分を知っています。私の質問は、私が場所を取得し、viewDidLoadでそれを印刷するのを待つ方法があるかどうかです。 – golldy

+0

いいえ、印刷する前に、ロケーションマネージャから座標を取得する必要があります。 –

+0

ロケーションマネージャが取得した位置座標を取得するための補完ハンドラがありませんか? – golldy

0

非同期操作の仕組みに慣れる必要があります。彼らは将来、ある時点で結果を出します。

CLLocationを使用すると、ユーザーが場所を取得する許可を拒否する可能性があります。ちょうどあなたがその場所を望むからといって、あなたがそれを得ているわけではありません。

したがって、あなたのビューは、3つの状況(場所が不明、場所拒否、および既知の場所)のすべてで有用なものを表示できる必要があります。また、ステータスが「不明」から「アクセス拒否」に変わった場合にも、didChangeAuthorizationStatusを実装したいと考えています。そして、各コールバックはディスプレイを適切に変更できる必要があります。

関連する問題