这似乎是一个非常基本的问题,但是还没有找到答案。
以下是我尝试的内容
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]]()
答案 0 :(得分:2)
Comparable
和Hashable
都不能单独用作类型,因为它们的定义中包含Self
,并且只能用作通用约束。
无论如何,如果你考虑一下,你的字典能够拥有不同类型的密钥,这真的没有意义,因为每个可比类型只能与自己的类型相比,而不是其他类型。
如果你的字典只有一个特定的可比较的,可散列的类型,你可以使包含这个代码的函数或类通用并约束那里的类型参数:
func foo<T : protocol<Comparable, Hashable> >() {
var items = [T: [NSObject]]()
}
答案 1 :(得分:1)
@newacct答案的更新:
从Swift 4.2开始,不再使用protocol < >
语法。而是像这样使用&
:
<T: Comparable & Hashable>