【发布时间】:2015-10-30 12:39:14
【问题描述】:
我有这个功能:
func flatten<Key: Hashable, Value>(dict: Dictionary<Key, Optional<Value>>) -> Dictionary<Key, Value> {
var result = [Key: Value]()
for (key, value) in dict {
guard let value = value else { continue }
result[key] = value
}
return result
}
如您所见,它将[Key: Value?] 字典转换为[Key: Value] 字典(没有可选的)。
我想用一个新方法扩展 Dictionary 类,该方法仅适用于值为任何类型的 Optional 的类,但我无法为字典的通用参数添加约束。
这是我尝试过的:
extension Dictionary where Value: Optional<Any> {
func flatten() -> [Key: Any] {
var result = [Key: Any]()
for (key, value) in self {
guard let value = value else { continue }
result[key] = value
}
return result
}
}
但因错误而失败:
Type 'Value' constrained to non-protocol type 'Optional<Any>'
【问题讨论】:
标签: swift generics dictionary swift2 swift-extensions