在 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
已经声明它符合 Equatable
和 Hashable
。无需添加 : 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
有没有办法覆盖 NSManagedObject 的 Equatable?我有一个包含 30 万个对象的核心数据集,我需要根据对象的业务 ID 删除重复项。
// Coredata NSManagedObject
import Foundation
import CoreData
@objc(Business)
public class Business: NSManagedObject {
}
覆盖错误信息:
NSManagedObject
已经声明它符合 Equatable
和 Hashable
。无需添加 : 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