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
有两个通用参数 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
}
对于 ADDED 部分。
如果您在 Dictionary
的扩展中引入新的泛型参数 T
,方法 需要适用于 [=12= 的所有可能组合 ](:Hashable
)、Value
和 T
(:Hashable
)。 Key
和 T
可能不是同一类型。
(例如,Key
可能是 String
,T
可能是 Int
(都是 Hashable
)。你知道你不能用 Int
当 Key
是 String
.)
因此,您不能使用 T
类型的 key
下标。
更新 ADDED 部分。
看来是个合理的误会。而且您已经找到了一个很好的例子来解释具有关联类型的协议不仅仅是通用协议。
事实证明,在字典扩展中,下标非常无用,因为它表示 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
有两个通用参数 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
}
对于 ADDED 部分。
如果您在 Dictionary
的扩展中引入新的泛型参数 T
,方法 需要适用于 [=12= 的所有可能组合 ](:Hashable
)、Value
和 T
(:Hashable
)。 Key
和 T
可能不是同一类型。
(例如,Key
可能是 String
,T
可能是 Int
(都是 Hashable
)。你知道你不能用 Int
当 Key
是 String
.)
因此,您不能使用 T
类型的 key
下标。
更新 ADDED 部分。
看来是个合理的误会。而且您已经找到了一个很好的例子来解释具有关联类型的协议不仅仅是通用协议。