【发布时间】:2016-04-10 23:45:01
【问题描述】:
我有一个使用协议Equatable 的课程。该类如下所示:
class Item: Equatable {
let item: [[Modifications: String]]
init(item: [[Modifications: String]]) {
self.item = item
}
}
func ==(lhs: Item, rhs: Item) -> Bool {
return lhs.item == rhs.item
}
但这给了我错误(见标题)。属性item 之前是[[String: String]],没有问题,我不知道如何解决这个问题。我尝试在整个 SO 上进行谷歌搜索和搜索,但没有运气..
枚举只是一个简单的基础:
enum Modifications: Int {
case Add = 1
case Remove = 2
case More = 3
case Less = 4
}
【问题讨论】:
-
也许您需要将
==函数放在类定义中,以使其符合Equatable协议。 -
@MikeAtNobel 不,实施的地方很好。
-
修改是否符合 Equatable?既然你在你的字典数组中使用它,我可以理解为什么它需要是相等的才能让你的项目是相等的
-
当它是
[[String: String]]时没有问题,所以应该可以比较二维字典。 @ milo526:因为枚举具有原始类型值,所以如果我正确,它会自动变得相等。 @Leo Dabus:是的,我正在尝试另一种方式,但如果它是一系列字典会容易得多。 -
它看起来与stackoverflow.com/questions/33377761/… 非常相似:您可以将
[Modifications: String]的两个实例与==进行比较,但[Modifications: String]不符合Equatable。因此,==没有为这些字典的 array 定义。 – 我的猜测是这适用于[[String: String]],因为[String: String]可以桥接到 NSDictionary(又是 Equatable)。