gpt4 book ai didi

swift - 相等运算符重载未按预期工作

转载 作者:行者123 更新时间:2023-11-28 15:46:26 25 4
gpt4 key购买 nike

在意识到 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
}
}

现在我的问题是这个。上面的代码不起作用。我的意思是,尽管我确定这两个数组 firstArray 和 secondArray 包含常见的数字对,但该消息永远不会被打印出来。怎么了?我错过了一些明显的东西吗?任何提示将不胜感激。

最佳答案

如果您真的想继承NSObject,请使用isEqual

    class NumberPair: NSObject {
public var row,column:Int!

init(_ theRow: Int, _ theCol: Int) {
row = theRow
column = theCol
super.init()
}

override func isEqual(_ object: Any?) -> Bool {
guard let comparingObject = object as? NumberPair else {
return false
}
return row == comparingObject.row && column == comparingObject.column
}
}

要么在上面,要么只是放弃从 NSObject 继承并符合 Equatable 协议(protocol)。

class NumberPair: Equatable {
public var row,column:Int!

init(_ theRow: Int, _ theCol: Int) {
row = theRow
column = theCol
//super.init()
}



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)
}
}

关于swift - 相等运算符重载未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42970828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com