在Swift中重写Equatable和Hashable

时间:2019-06-02 00:07:13

标签: swift core-data nsmanagedobject hashable equatable

是否有一种方法可以重写NSManagedObject的Equatable?我有一个30万个对象的coredata数据集,我需要根据对象的业务ID删除重复项。

// Coredata NSManagedObject
import Foundation
import CoreData

@objc(Business)
public class Business: NSManagedObject {

}

覆盖错误消息:

enter image description here

2 个答案:

答案 0 :(得分:0)

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

您需要直接在Business类中重写关联的方法,而无需使用扩展名。

答案 1 :(得分:0)

由于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