我正在尝试创建一个具有Hashable项目和元素的元组类型。任何项目,&在Dictionary的自定义初始化程序中使用它。但是,Swift不会以这种方式使用Hashable,&我被困在一个替代方案中。我不想将我可以创建的字典限制为仅使用字符串作为键。
protocol CollectionInitializeable {
associatedtype T
init(items: [T])
}
extension Dictionary: CollectionInitializeable {
typealias T = (Hashable, Any) // not allowed
init(items: [T]) {
self.init()
// etc...
}
}
答案 0 :(得分:1)
由于Dictionary.init(uniqueKeysWithValues:)
和Dictionary.init(_:uniquingKeysWith:)
你在找这样的东西吗?
protocol CollectionInitializeable {
associatedtype T
init<C: Collection>(items: C) where C.Iterator.Element == T
}
extension Dictionary: CollectionInitializeable {
typealias T = Iterator.Element
init<C: Collection>(items c: C)
where C.Iterator.Element == T {
self.init()
for (key, value) in c {
self[key] = value
}
}
}
let a = [
(key: 1, value: "a"),
(key: 2, value: "b"),
(key: 3, value: "c")
]
print(Dictionary(items: a))