SwiftでGPSが位置を取得するコードはたくさんありますが、どのくらいで初期化かせ完了するかまでは他皆様の記事にはあまり書いていなかったので、記事としてのこしておきました。
通常は、CLLocationManager の初回イベントが発生するまで待てばいいのですが、アプリ起動時の位置をなるはやで知りたい場合があります。初回イベントが発生するまで待たせると「反応しない」とコンプレインにつながる場合もあります。
CLLocationManager に初期化完了のイベントは見当たらず。(調べきれていないかも…) 具体的なGPS初期化時間は公称されていないし、端末や処理負荷によって変わってしまうかもしれません。そこで以下のようなコードにしてみました。
public var NowLatitude = 0.0
public var NowLongitude = 0.0
private var myLocMgr: CLLocationManager
var i:Int = 0
while( i < 30 /* 約1.5分 */ ) {
if let startLoc = myLocMgr.location {
// 自クラス用にコピー
NowLatitude = startLoc.coordinate.latitude
NowLongitude = startLoc.coordinate.longitude
break
}
Thread.sleep(forTimeInterval:3)
i += 1
}
とれるまでぐるぐる回すしかない。iPad 6thでは大体このくらいで収まっていました。初期GPS位置が取れなかった場合のリスクに応じて、whileの回数を調整するばよいかなと思います。