変更
as! [[String:AnyObject]]
あなたはJSONデータをキャストに強制しようとしている(と!)ので、あなたはガードを使用しているにもかかわらず、場合あなたはまだその場所でクラッシュを取得しますその無し。
編集:あなたはまだ強制的に言った!そのようにあなたのコードを分割しようとするかもしれません。また、jsonレスポンスのdicts/arraysから他の情報を取得するのがより読みやすく、簡単になるはずです。このような何かは1つがあなたの全体のブロックが終了しない障害が発生した包みので、個別に各ラインのために、これらのガード文を分割しようとするより良いかもしれない
/// 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
を動作するはずです。あなたが早く退出したくないので、その場合はletを使う方がよいでしょう。 if文を使用すると、運命のピラミッドを開始してはいけません。
/// 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
}
これが役に立ちます。
スウィフトコンパイラは私としてやっています! – kuemme01
ビルドに失敗しましたか? – kuemme01
この大量のステートメントを実行する代わりに、コードを分割してください。私の答えを更新してみましょう、私に数分を与えてください。 – crashoverride777