【问题标题】:Override Equatable and Hashable in Swift在 Swift 中覆盖 Equatable 和 Hashable
【发布时间】:2019-06-02 00:07:13
【问题描述】:

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

// Coredata NSManagedObject
import Foundation
import CoreData

@objc(Business)
public class Business: NSManagedObject {

}

覆盖错误消息:

【问题讨论】:

标签: swift core-data nsmanagedobject hashable equatable


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

既然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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多