在 Swift 中覆盖 Equatable 和 Hashable

Override Equatable and Hashable in Swift

有没有办法覆盖 NSManagedObject 的 Equatable?我有一个包含 30 万个对象的核心数据集,我需要根据对象的业务 ID 删除重复项。

// Coredata NSManagedObject
import Foundation
import CoreData

@objc(Business)
public class Business: NSManagedObject {

}

覆盖错误信息:

NSManagedObject 已经声明它符合 EquatableHashable。无需添加 : Equatable.

您需要直接在 Business class 中覆盖关联的方法,而不使用扩展。

既然NSManagedObject已经符合Equatable,何必再去符合呢? :) 只需重写 == 函数即可!

extension Business {
    static func == (lhs: Business, rhs: Business) -> Bool {
        print("custom equation has been called")
        return lhs.id == rhs.id
    }
}

你可以这样测试:

var b1 = Business()
var b2 = Business()
b1.id = "1"
b2.id = "2"

print("b1 == b2 ? \(b1 == b2)")

打印出来的结果证明您的自定义 == 函数被调用了。

custom equation has been called
b1 == b2 ? false