Swift 在扩展中使用键的字典访问值

Swift Dictionary access value using key within extension

事实证明,在字典扩展中,下标非常无用,因为它表示 Ambiguous reference to member 'subscript'。看来我要么必须执行 Swift 在其 subscript(Key) 中执行的操作,要么调用一个函数。有什么想法吗?

例如,

public extension Dictionary {
    public func bool(_ key: String) -> Bool? {
        return self[key] as? Bool
    }
}

不行,因为据说下标不明确。

ADDED 我的误解来自于我假设 Key 是一个 AssociatedType 而不是通用参数。

Swift 类型 Dictionary 有两个通用参数 KeyValue,并且 Key 可能不是 String.

这个有效:

public extension Dictionary {
    public func bool(_ key: Key) -> Bool? {
        return self[key] as? Bool
    }
}

let dict: [String: Any] = [
    "a": true,
    "b": 0,
]
if let a = dict.bool("a") {
    print(a) //->true
}
if let b = dict.bool("b") {
    print(b) //not executed
}

对于 ADDED 部分。

如果您在 Dictionary 的扩展中引入新的泛型参数 T,方法 需要适用于 [=12= 的所有可能组合 ](:Hashable)、ValueT(:Hashable)。 KeyT 可能不是同一类型。

(例如,Key 可能是 StringT 可能是 Int(都是 Hashable)。你知道你不能用 IntKeyString.)

因此,您不能使用 T 类型的 key 下标。


更新 ADDED 部分。

看来是个合理的误会。而且您已经找到了一个很好的例子来解释具有关联类型的协议不仅仅是通用协议。