2016-04-01 9 views
0

私のプロジェクトのAlamofireパッケージにいくつかの追加機能を追加しました。何らかの理由でこのオプションのバインディングで、 "エラー"キーが存在するかどうか。私が間違っていることに関するアイデアは?Swiftオプションのバインディングにnullデータが残っています

let JSON = try NSJSONSerialization.JSONObjectWithData(validData, options: options) 

if let error = JSON["error"] { 
    print(error!) 
    return .ServerError(error as! String) 
} 

プリントで失敗し、エラーがない「致命的なエラーが:オプションの値をアンラップしながら、予想外にnilを見つけ、」

答えて

2

をあなたは内で実行オプションのアンラップを支援し、ないであろうas? Stringを追加してみてください可能性があり文は、文字列がない場合場合:

let JSON = try NSJSONSerialization.JSONObjectWithData(validData, options: options) 

if let error = JSON["error"] as? String { 
    print(error) 
    return .ServerError(error) 
} 
+1

力アンラップは不要である。この場合には信頼性の高い結果を得るために適したものにタイプをキャストする必要があります。 'JSON'がオプションであっても、すでに' if let'に入っていますので、なぜunwrapを強制しますか? – nhgrif

+0

True!しかし、最初の部分はまだまだです –

+0

これはJSON配列がJSON配列を含んでいれば失敗しません。 ありがとうございます! – beerye

2

問題はJSONObjectWithDataAnyObjectを返すことです。
あなたはDictionary

do { 
    let JSON = try NSJSONSerialization.JSONObjectWithData(validData, options: options) as! [String:AnyObject] 

    if let error = JSON["error"] as? String { 
     print(error) 
     return .ServerError(error) 
    } 
} 
catch let error as NSError { 
    print(error) 
} 
+0

JSON ["error"] 'をサイレントエラーではなく' String'としてアンラップすることはできません。 – nhgrif

+0

これはトリックですが、エラーがなければ必ず[String:AnyObject]の辞書になるとは言いません。 JSON配列が時々送られてきましたが、このメソッドは失敗します – beerye

+0

このようにエラーを取得してチェックしたい場合、JSONオブジェクトは辞書でなければなりません。そうでなければJSONを 'AnyObject'として残し、デシリアライゼーション。 – vadian

関連する問題