1
嗨,我想使用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文檔也像第二種方式一樣使用!我正在考慮它們之間的線程差異
另外,我如何知道代碼在responseJSON中運行的是什麼線程?
謝謝,我感謝你的時間和幫助!
這意味着alamofire請求在後臺啓動後,會立即返回主線程以第二種方式完成。因此它已被接收到數據 –
請記住,粘貼的這兩個示例不僅在您使用的Alamofire回調語法方面不同,而且在您放置完成()調用的位置上也不相同。在第一個例子中,你將'completed()'調用放在alamofire回調函中,然後放在外面。這就是你使用的閉包語法的原因。 –
真的很感謝你的幫助,它現在可以工作! –