變化
as! [[String:AnyObject]]
到
as? [[String:AnyObject]]
您正在試圖迫使投你的JSON數據(!),所以即使你使用的守護你還是會在該點,如果得到一個崩潰其零。
編輯:你說它仍然強迫!所以也許嘗試像這樣分解你的代碼。還應該讓它更易讀,更容易從json響應的字典/數組中獲取其他信息。像這樣的東西應該工作
/// Get json data
guard
let loadedWeather = json["weather"] as? [[String:AnyObject]],
let loadedTemperatur = json["main"] as? [String:AnyObject],
let loadedWindSpeed = json["wind"] as? [String:AnyObject]
else {
print("Weather JSON-Parsing failed")
return
}
/// Get info from json data
guard
let weatherDescription = loadedWeather[0]["description"] as? String,
let temperature = loadedTemperatur["temp"] as? Float,
let windSpeed = loadedWindSpeed["speed"] as? Float
else {
print("Weather JSON-Parsing failed")
return
}
/// do something with weather description, temperature, windSpeed
甚至更好的嘗試單獨分割每行的後衛語句,使櫃面一個失敗,你的整個塊不會退出。在那種情況下,如果因爲不想早點退出而更好使用。如果發表聲明,就不要啓動厄運的任何金字塔。
/// Weather
if let loadedWeather = json["weather"] as? [[String:AnyObject]],
let weatherDescription = loadedWeather[0]["description"] as? String {
// do something with weather description
}
/// Temperature
if let loadedTemperatur = json["main"] as? [String:AnyObject],
let temperature = loadedTemperatur["temp"] as? Float {
// do something with temperature
}
/// Wind speed
if let loadedWindSpeed = json["wind"] as? [String:AnyObject],
let windSpeed = loadedWindSpeed["speed"] as? Float {
// do something with windspeed
}
希望這會有所幫助。
Swift編譯器迫使我做! – kuemme01
構建失敗與as? – kuemme01
你應該嘗試分解你的代碼,而不是做這個大規模的聲明。讓我更新我的答案,給我幾分鐘。 – crashoverride777