创建可比较和可用键的字典?

时间:2015-02-12 18:41:32

标签: swift generics dictionary

这似乎是一个非常基本的问题,但是还没有找到答案。

以下是我尝试的内容

var items = [Comparable: [NSObject]]()

var items = [Comparable, Hashable: [NSObject]]()

var items = [protocol<Comparable, Hashable>: [NSObject]]()

typealeas Key = T where T: Hashable, T: Comparable
var items = [Key: [NSObject]]()

2 个答案:

答案 0 :(得分:2)

ComparableHashable都不能单独用作类型,因为它们的定义中包含Self,并且只能用作通用约束。

无论如何,如果你考虑一下,你的字典能够拥有不同类型的密钥,这真的没有意义,因为每个可比类型只能与自己的类型相比,而不是其他类型。

如果你的字典只有一个特定的可比较的,可散列的类型,你可以使包含这个代码的函数或类通用并约束那里的类型参数:

func foo<T : protocol<Comparable, Hashable> >() {

  var items = [T: [NSObject]]()

}

答案 1 :(得分:1)

@newacct答案的更新:

从Swift 4.2开始,不再使用protocol < >语法。而是像这样使用&

<T: Comparable & Hashable>