fun*_*ct7 0 extension-methods dictionary hashtable subscript swift
事实证明,在Dictionary扩展中,下标因为说是非常没用Ambiguous reference to member 'subscript'。看来我要么必须做Swift要做的事情,要么要subscript(Key)调用一个函数。有任何想法吗?
例如,
public extension Dictionary {
public func bool(_ key: String) -> Bool? {
return self[key] as? Bool
}
}
Run Code Online (Sandbox Code Playgroud)
由于下标被认为是模棱两可的,因此将无法使用。
添加我的误解来自以下事实:我认为这Key是AssociatedType一个通用参数,而不是通用参数。
雨燕Dictionary有两个通用的参数Key和Value,并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
}
Run Code Online (Sandbox Code Playgroud)
对于添加的部分。
如果引入了一个新的通用参数T中的延伸Dictionary,该方法需要适用于所有可能组合的Key(:Hashable)Value和T(:Hashable)。Key并且T可能不是同一类型。
(例如,Key可能是String和T可能是Int(两者Hashable)。您知道不能使用Intwhen Key是下标String。)
因此,您不能使用key类型下标T。
对于更新的添加部分。
似乎是一种合理的误解。您已经找到了一个很好的示例,它解释了具有关联类型的协议不仅仅是通用协议。