こんにちは、alamofireを使用してjsonの気象データをダウンロードしようとしています。 ここに私のコード、作業バージョンです:Alamofireがクラスプロパティデータを更新できませんでした
class WeatherModel {
private var _date: String?
private var _location: String?
private var _weatherType: String?
private var _temperature: Double?
func getWeatherInfoFromAPI(completed: @escaping()->()) {
let url = URL(string: WEATHER_URL)!
Alamofire.request(url).responseJSON(completionHandler: { response in
// Test updating data
self._temperature = 25
self._weatherType = "Clear"
self._location = "Vietnam"
completed()
})
}
}
- >この方法では、私はクラスのプロパティを更新することができています。 getWeatherInfoFromAPIのFUNCのクラスプロパティのバージョン更新に失敗
:だから
func getWeatherInfoFromAPI(completed: @escaping()->()) {
let url = URL(string: WEATHER_URL)!
Alamofire.request(url).responseJSON{ response in
// Test updating data
self._temperature = 25
self._weatherType = "Clear"
self._location = "Vietnam"
}
completed()
}
は、私はそれらの違いが何であるかを知りません。 2つの方法の間で明確にするために私を助けてください。
Alamofire.request(url).responseJSON(completionHandler: { response in })
と
Alamofire.request(url).responseJSON{ response in }
私のコードは動作しないという理由は何ですか?私はAlamofireのドキュメントも2番目の方法のように使います!私はそれらの間のスレッドの違いについて考えています
また、どのようにコードがresponseJSONで実行されているスレッドを知っていますか?
ありがとう、私はあなたの時間と助けてくれてありがとう!
これは、アラモファイア要求がバックグラウンドで開始された後、すぐにメインスレッドに戻って2番目の方法で完了することを意味します。したがって、データはまだ受信されました –
貼り付けた2つの例は、使用したAlamofireコールバック構文だけでなく、 'completed()'呼び出しを置いた場所も異なります。最初の例では、alamofireコールバックに 'completed()'コールを入れました。それが、あなたが使用したクロージャの構文にとっての理由です。 –
本当に助けていただければ幸いです。 –