我如何扩展其价值本身就是字典的字典?

How can I extend dictionaries whose values are dictionaries themselves?

说我想用一些功能扩展嵌套字典。使用伪Swift,这是我的目标:

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 实现的协议没有提供我需要引用的方法和类型;访问泛型的类型很麻烦;等等。我试过都没有用。

有什么解决方案?

我们可以在这里使用的一个技巧(我敢说模式吗?)是定义我们的 own 协议(我们从未打算在其他任何地方使用它)它声明了我们需要的所有内容和无论如何,我们知道 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]
    }
}

这个解决方案适用于数组的数组,可能还有很多类似的情况。