Swift で Dictionary
を扱うときのメモです。API 呼び出しのレスポンスを JSON で扱いたい時に Dictionary<String, AnyObject>
として扱う際のポイントです。
1 2 3 4 5 6 7 |
|
最後のはなぜコンパイルエラーになるかというと、Dictionary
の subscript
が2種類定義されていて、期待したのと違う方が呼び出されているからです。
1 2 3 4 5 6 |
|
json["foobar"]
の戻り値は (Key, Value)
か Value?
のどちらかですが、as String
を付けた際に Optional ではないと判断されてしまい (Key, Value)
が戻り値の型と判定されます。それでコンパイルエラーになるわけですね。
期待した通りに取得するには、json["foobar"]
の戻り値を Value?
として扱う必要があるので、
1 2 |
|
のどちらかでアクセスする必要があるわけです。!
を付けると unwrap されるので nil
が入っていると実行時エラーになります。逆に as AnyObject? as? String
でアクセスすると Optional 型になってしまいます。
API のインターフェースと相談して、どちらの型で処理するか決めるといいんじゃないかと思います。