func downloadCurrentWeather(completed: @escaping DownloadComplete){
Alamofire.request(API_URL).responseJSON { (response) in
let result = response.result
let json = JSON(result.value) // <-- (EXPRESSION IMPLICITLY COERCED WARNING)
self._cityName = json["name"].stringValue
let tempDate = json["dt"].double
let convertedDate = Date(timeIntervalSince1970: tempDate!)
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .none
let currentDate = dateFormatter.string(from: convertedDate)
self._date = "\(currentDate)"
self._weatherType = json["weather"][0]["main"].stringValue
let downloadedTemp = json["main"]["temp"].double
self._currentTemp = (downloadedTemp! - 273.15).rounded(toPlaces: 0)
completed()
}
}
質問する
1983 次
1 に答える
3
オプションの値でvalue
あるため、強制しています。ラップを解除して、そうでないことを確認することをおAny?
勧めします。value
nil
func downloadCurrentWeather(completed: @escaping DownloadComplete){
Alamofire.request(API_URL).responseJSON { (response) in
guard let value = response.result.value else {
print(response.result.error ?? "Unknown error")
return
}
let json = JSON(value)
...
}
}
さらなる改良として、DownloadComplete
失敗したかどうかに関する情報を含めるように変更します。たとえば、Error?
パラメーターを追加すると、次のようになります。
func downloadCurrentWeather(completed: @escaping DownloadComplete){
Alamofire.request(API_URL).responseJSON { (response) in
guard let value = response.result.value else {
completed(response.result.error)
return
}
let json = JSON(value)
...
completed(nil)
}
}
次に、発信者は、error
があったnil
かどうかを確認できます。
もう 1 つのアプローチはswitch
onresponse.result
です。この.success
場合、関連付けられた値をそのまま使用できるためです。
func downloadCurrentWeather(completed: @escaping DownloadComplete){
Alamofire.request(API_URL).responseJSON { response in
switch response.result {
case .failure(let error):
completed(error)
case .success(let value):
let json = JSON(value)
...
completed(nil)
}
}
}
于 2018-03-22T17:49:21.017 に答える