2016-04-18 17 views
0

スウィフト2.1コード:私はスウィフト2.2を実行しているのXcode 7.3にアップデートスウィフト2.2オプションの種類の自動補正

let userDetail = response["params"]?["users"] 

。そしてそれは上記の同じ行に文句を言うようになります。 次のように文句を言います。

オプションの値AnyObject?アンラップされていない。あなたは '!'を使うつもりでしたか?または '?' ?

私は自動それは私に訂正一つとして、以下のコードを与えているXcodeの提案を修正:

let userDetail   = response["params"]?!["users"] 

ここでの応答は、私が強制的にここに、オプションのラップを解除したくないタイプのAnyObject?

です。

ここで何が問題なのか誰か知りませんか? Swift 2.2でのオプションの変更により、このエラーが発生しています。辞書[K: V]については

+0

を期待されるタイプに対する連鎖し、オプションのバインディングチェックを使用することができuserDetail' 'の種類は何ですか? – sbarow

+0

これは辞書型です。私はそれのような値にアクセスします:userDetail?["gender"] as?文字列 –

答えて

3

、添字の戻り値の型はV?であり、したがって、あなたのケースでresponse["params"]の戻り値の型はV == AnyObject?以来AnyObject??です。 AnyObjectは二回アンラップする必要があるために回復するには:

// swift 2.2 only: 

//         v 
let userDetail = response["params"]??["users"] 

// note: the type of userDetail is still `AnyObject??` 

私はスウィフト2.2に変更されたかわからないんだけど、多分チェックが厳しくなります。


更新:スウィフト3ではuserDetailのタイプはAny??になり、あなたはチェーン、さらに添字をすることはできません。実際には、Swift 3のJSONSerializationはchanged to return Any instead of AnyObjectであるため、response["params"]と書くことさえできません。代わりにSwiftyJSONのような専用のJSONパッケージを使用することを検討してください。

2

スウィフト2.2は、辞書キーから返されたAnyObjectのキー/インデックスサブスクリプションについて、より限定的です。

あなたは、

if let userDetail = response["params"] as? [String:AnyObject], users = userDetail["users"] as? Whatever {} 
関連する問題