私はそのようなことをしたい:文字列列挙で辞書値にアクセスする。私は辞書の添え字をオーバーロードしようとしていますが、成功しません。添字:文字列列挙で辞書値にアクセスする
let district = address[JsonKeys.district]
JsonKeysは次のとおりです:
enum JsonKeys: String {
case key1
case key2
case key...
}
と私の添字のオーバーロードは以下の通りである:
辞書へのアクセス
extension Dictionary where Key: StringLiteralConvertible, Value: AnyObject {
subscript(index: FOJsonKeys) -> AnyObject {
get {
return self[ index.rawValue] as! AnyObject
}
}
}
私は、次のメッセージが出ます:
を**Cannot subscript a value of type 'Dictionary<Key, Value>' with an index of type 'String'**
どこが間違っていますか?
PS:これを行うにはしたくない(これはエラーを修正するだろうが、コードはこのよう読めない):
let district = address[JsonKeys.district.rawValue]
辞書は、JSONがAlamoFireによって私に与えられた辞書を解析されています。私はそのタイプを変更できないと確信しています。
これは深刻な問題を指している可能性があります。これらの辞書はできるだけ早く構造体やクラスに構文解析する必要があります。そのため、JSON文字列キーを扱うコードは非常にローカライズする必要があります。プログラム内の複数の場所でこれらのキーを使用する必要がある場合は、モデルレイヤーが正しくない可能性があります。これが失敗する理由は、 "StringLiteralConvertible"が* exact * Stringではないということです。 Swiftにこの拡張機能を書くことは現時点では不可能です(これはコンパイラの既知の制限ですが、必要なときはいつも間違ったことをしています)。 –
これはこのコードの目的であり、Json辞書を解析してクラスにします。私はStringキーを使いたくない。 String enumを使用する方がより堅牢です。 – t4ncr3d3
それは公正です。以下に答えました。 –