元组类型与可清洗物品

时间:2017-07-18 17:51:15

标签: swift associated-types

我正在尝试创建一个具有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...
    }
}

1 个答案:

答案 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))