【发布时间】:2017-03-23 08:34:46
【问题描述】:
在意识到 Swift 不知道如何比较数字对(作为 Int 的元组)之后。我用以下代码定义了一个类:
import Foundation
class NumberPair: NSObject {
var row,column:Int!
init(_ theRow: Int, _ theCol: Int) {
row = theRow
column = theCol
super.init()
}
convenience override init() {
self.init(0,0)
}
static func == (lhs: NumberPair, rhs: NumberPair) -> Bool {
return (lhs.row == rhs.row) && (lhs.column == rhs.column)
}
static func != (lhs: NumberPair, rhs: NumberPair) -> Bool {
return (lhs.row != rhs.row) || (lhs.column != rhs.column)
}
}
然后在使用类时我有这样的东西:
var firstArray = [NumberPair](), secondArray = [NumberPair]()
...........................
// Some code working fine that fills up firstArray and secondArray.
...........................
for pairItem in firstArray {
if secondArray.index(of: pairItem) != nil {
print("We found an item that is in both arrays.")
break
}
}
现在我的问题是这个。上面的代码不起作用。我的意思是,尽管我确定 2 个数组 firstArray 和 secondArray 包含常见的数字对,但消息永远不会被打印出来。怎么了?我错过了一些明显的东西吗?任何提示将不胜感激。
【问题讨论】:
-
参见stackoverflow.com/a/42286148/2976878 的第 2 点——子类不能重新实现它们的超类(
NSObject)协议的实现(Equatable)。如前所述,解决方案是覆盖isEqual(_:)(你也应该覆盖hash)。 -
@Hamish 很好的答案。
标签: swift operator-overloading