【发布时间】:2017-08-13 21:42:16
【问题描述】:
考虑这个例子:
protocol Observable: Hashable {
// ...
}
struct People: Observable {
var name: String
var age: Double
var hashValue: Int {
// ...
}
static func ==(lhs: People, rhs: People) -> Bool {
// ,,,
}
}
struct Color: Observable {
var red: Double, green: Double, blue: Double
var hashValue: Int {
// ...
}
static func ==(lhs: Color, rhs: Color) -> Bool {
// ...
}
}
var observers: Set<Observable> = [] // Not allowed by the compiler
People 和 Color 都符合Observable 协议,它也继承自Hashable 协议。我想将这些存储在observers 集合中。
using 'Observable' as a concrete type conforming to protocol
'Hashable' is not supported
是否可以在 Swift 中做异构 Set?
【问题讨论】:
-
你为什么不直接使用一组
AnyHashable? -
“如果我使用 Array 执行此操作,它可以工作”,我收到以下错误:
error: protocol 'Observable' can only be used as a generic constraint because it has Self or associated type requirements var observers: Array<Observable> = [] -
@AhmadF 你是对的,对此感到抱歉。我编辑了这个问题。但是如何制作 Heterogenous Set 呢?
-
var observers: Set<AnyHashable> = [] -
问题是(在链接的问答中)您可以比较两个人或两种颜色,但不能比较一个人与一种颜色。