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 のインターフェースと相談して、どちらの型で処理するか決めるといいんじゃないかと思います。
