【发布时间】:2018-03-13 00:00:37
【问题描述】:
我在 Playgraound 中有以下代码,但无法按我的意愿工作。
class Obj: NSObject {
var va1: String? = nil
var va2: Int? = nil
init(_ v1: String,_ v2: Int){
va1 = v1
va2 = v2
}
static func ==(lhs: Obj, rhs: Obj) -> Bool {
guard lhs.va1 == rhs.va1 else { return false }
guard lhs.va2 == rhs.va2 else { return false }
return true
}
}
var objArray1: [Obj] = [Obj("a", 1), Obj("b", 2), Obj("c", 3)]
var objArray2: [Obj] = [Obj("a", 1), Obj("b", 2), Obj("d", 4)]
objArray1 += objArray2
objArray1 = Array(Set(objArray1))
但 objArray1 将包含所有重复项。
我检查了其他问题,例如:
Removing Duplicates From Array of Custom Objects Swift。
Remove duplicate objects in an array 。
但是,就我而言,我无法更改 Obj 的超类 NSObject。 自定义类型必须是 NSObject 的子类。
问题:有没有什么优雅的方法可以实现合并两个自定义类型数组并移除重复的自定义类型项
【问题讨论】:
-
对于
NSObject子类,您需要覆盖isEqual(_:)和hash(而不是重载==),比较stackoverflow.com/q/33319959/2976878。