gpt4 book ai didi

swift - 为什么我必须添加 != 才能使 Equatable 有效?

转载 作者:搜寻专家 更新时间:2023-10-31 22:05:05 26 4
gpt4 key购买 nike

为什么我必须添加 != 才能使比较正确?

import UIKit

class Person: NSObject {
var name: String
var age: Int

init(name: String, age: Int) {
self.name = name
self.age = age
}
}

extension Person {
static func ==(lhs: Person, rhs: Person) -> Bool {
return lhs.name == rhs.name && lhs.age == rhs.age
}
static func !=(lhs: Person, rhs: Person) -> Bool {
return !(lhs == rhs)
}
}

let first = Person(name: "John", age: 26)
let second = Person(name: "John", age: 26)

/**
* return false (which is correct) when we implement != function. But,
* it will return true if we don't implement the != function.
*/
first != second

更新:所以我明白了为什么我必须添加 != 函数才能使其工作。这是因为该类继承了 NSObject,它在后台使用了 isEqual 方法。但是为什么添加 != 函数可以让它工作呢?这里有什么解释吗?

最佳答案

NSObject 符合 Equatable 但使用它自己的 isEqual 方法并且根据 isEqual 两个实例都不是平等的。 NSObject 仅在您的 != 形式实现时调用 ==,其中包含 ==

如果删除 NSObject(并添加 Equatable),== 的实现将按预期工作。

NSObject 的推荐方法是使用自定义实现覆盖 isEqual 并省略 ==(和 !=).

关于swift - 为什么我必须添加 != 才能使 Equatable 有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45580926/

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