私は、ユーザーの現在の場所を取得し、URL要求を実行するrequestDataという関数を使用したいと考えています。要求が完了したときにコールバックを持つためには、requestData-functionが必要です。それは成功したかどうかです。これは私がこれまでに出ているものです:別の関数からの代理応答をどのように聞くことができますか?
requestData(_ completion:@escaping()->()){
self.locationManager.requestLocation()
// Wait for the location to be updated
let location:CLLocation? = //myLocation
self.performRequest(with: location, completion: completion)
}
func performRequest(with location:CLLocation?, completion:@escaping()->()){
//Does the URL-request, and simply calls completion() when finished.
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if let location = locations.first {//Success}
else{//Error}
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error)
{//Error}
私の考えは、それがmyLocationを要求しますrequestDataを呼び出し、その後、performRequestを呼び出すことです。しかし、CLLocationManagerはブロックではなくデリゲートコールバックを持つrequestLocation
です。私はこれをどのようにするべきですか?
self.locationManager.requestLocation({ (locations, error) in
if locations {}
else {}
})
をしかし、それはありませんこれは私が理解して、ウィジェット(TodayExtension)内のコード、ある、
を明確にする..:requestLocationはこのようにしてきたかどう すべてが素晴らしいしてきたでしょうコールバックが必要です。widgetPerformUpdate(completionHandler:)
が自分自身のcompletionHandlerを待ってから自分自身をトリガーする必要があるためです。
CLLocationを使用してロケートの時刻と精度をチェックすることができますあなたはあなたがperformRequest()を呼び出す前に取得します。そうすれば、その場所は正確であり、できるだけ更新されていることがわかります。 – Starlord
コールバックハンドラをプロパティに保存してから、デリゲートメソッドからコールバックハンドラを呼び出すことができます – Paulw11