创建 Comparable 和 Hashable 键的字典?

Create dictionary of Comparable and Hashable keys?

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

这是我试过的方法

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]]()

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

无论如何,如果您考虑一下,您的字典能够具有不同可比较类型的键,这实际上没有任何意义,因为每个可比较类型只能与它自己的类型进行比较,而不能与其他类型进行比较。

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

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

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

}

更新@newacct 的回答:

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

<T: Comparable & Hashable>