2017-01-10 8 views
0

私はいくつかの機能を持つネストされた辞書を拡張したいと言います。疑似スウィフトを使用すると、これは私の目標です。どのように辞書自体の値が辞書を拡張できますか?

extension Dictionary where Value: Dictionary { 
    typealias K1 = Key 
    typealias K2 = Value.Key 
    typealias V = Value.Value 

    subscript(k1: K1, k2: K2) -> V? { 
     return self[k1]?[k2] 
    } 
} 

私はこれを動作させることはできません。型境界は、非プロトコル型であってはなりません。 Dictionaryが実装しているプロトコルはありません。参照する必要があるメソッドIと型が用意されています。ジェネリック型にアクセスするのは面倒です。等々。私が試したことはありません。

この解決策には何がありますか?我々がここで使用することができます

答えて

0

1つのトリックは、(私はパターンをあえて言う?)我々が必要と私たちはDictionaryはとにかく、に準拠して知っているすべてを宣言します(私たちはどこにも使用する予定はありません)私たちの自身プロトコルを定義することです。

protocol DictionaryProtocol { 
    associatedtype Key: Hashable 
    associatedtype Value 

    subscript(key: Key) -> Value? { get set } 
} 

extension Dictionary: DictionaryProtocol {} 

extension Dictionary where Value: DictionaryProtocol { 
    typealias K1 = Key 
    typealias K2 = Value.Key 
    typealias V = Value.Value 

    subscript(k1: K1, k2: K2) -> V? { 
     return self[k1]?[k2] 
    } 
} 

この解決法は、配列の配列とおそらく多くの同様のケースに引き継がれます。

関連する問題