「手動でCLLocationを呼び出す」ことはできません。場所の更新を開始すると、システムはdidUpdateLocations
メソッドの呼び出しを開始します。最初に取得する場所は、精度がかなり悪い可能性があります。良い場所を得るためには、実際に正確さをチェックし、それを受け入れる前に要件を満たす場所を見つけるまで待つ必要があります。
私は新しいrequestLocation
メソッドをまだ使用していないため、最初に場所をリクエストしたときに得た悪い結果に関して、どのように機能するのか分かりません。ドキュメントは「位置修正はdesiredAccuracyプロパティで指定された精度レベルで取得されています」と言いますが、startUpdatingLocations
も希望の精度を誇り、最初の数回の読みはstartUpdatingLocations
。
どちらの場合も、どちらのアプローチもdidUpdateLocations
に結果/結果を呼び出します。
ロケーションを取得した後にクロージャ/補完ハンドラを呼び出す場合は、独自のロケーションマネージャシングルトンを作成することをお勧めします。それをMyLocationManager
としましょう。
これにメソッドgetLocation(completion:)
を付けて、完了ブロックを取ることができます。実装は、場所の更新を開始するか、またはrequestLocation
を呼び出します(そのメソッドが最初に信頼性の高い場所を返す場合)。また、(オプションの)インスタンス変数に補完ハンドラクロージャを保存することもありません。 MyLocationManagerのdidUpdateLocationsの実装では、完了ハンドラがあるかどうかをチェックし、見つかった場合はそれを呼び出して、完了ハンドラを終了します。
私はあなたの質問を理解するとは思わない。どの補完ハンドラについて話していますか? locationManager:didUpdateLocations: 'を使用して、ロケーションマネージャがいつロケーションの更新を完了したかを知る必要があります。 – AdamPro13