2016-12-05 7 views
-1

タイトルが示すように、「致命的なエラーが発生しました。 JSONが有効で、リンクはhttp://www.mocky.io/v2/5844d2801100001d140e6b91です。致命的なエラー:予期せぬことにnilが有効なJSONのDictionaryを使用してオプションの値をアンラップしています

私に問題を与えているコードの行はここにある:1つの時点で

let fighterDetails = dictionary["Fighters"]! as! [[String:AnyObject]] 

、私はすべてのコードを働いていました。私はトピックを変更することに決めたので、私のコード全体を再構築しました。私は他のすべてのエラーを修正しましたが、これは実行時に残されています。

image json receiver

+0

明らかに、辞書["Fighters"] 'は[[String:AnyObject]]ではありません – Alexander

+0

私の教授は彼のプロジェクトの例で" let customerDetails = dictionary ["Customers" ]!!![[String:AnyObject]] "としてください。顧客はオブジェクトです。彼の仕事。違いは何ですか? – Kevin

+4

いつでも使用できます!外部データでは、小さなバニーが死んでプログラムがクラッシュする可能性があります。また、JSONには文字列「Fighters」が含まれていません。それは "顧客"を含んでいます。条件付きアンラッピングを使用 – Paulw11

答えて

2

リモートJSONデータを解析するときは、となるべく!演算子を使用する必要があります。アンラップとき代わりに、guardステートメントを使用します。

guard let fighterDetails = dictionary["Fighters"] as? [[String:AnyObject]] else { 
    return [] 
} 

そしてtry?の代わりtry!を使用しています。

お客様の開発者にとっては、スピーディーな習慣の改善に役立つSwiftLintの使用をお勧めします。それはas!で問題を検出しました。

サーバー開発者にとっては、1文字の大文字表記を使用することをお勧めします。 People tend to recommend camelCase when dealing with JSON keys。つまり、「名前」、「国」などに合わせて「戦闘機」を「戦闘機」に変更する必要があります。欠落しているキーの問題を回避している可能性があります。

+0

私の意見では、 '!'は "Swiftの' goto'です:-) –

+0

Appleが私たちを救う日を待っています'@IBOutlet weak var button:UIButton!'などに依存する必要があります。 –

+0

@Cœur素晴らしいフィードバック。これありがとう。 – Kevin

1

私は、JSONのURLをチェックして、そこにはキー "ファイターズ" はありません。

+0

ありがとうございました!まあまあ。 – Kevin

関連する問題