变化
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