【发布时间】:2016-02-21 21:17:00
【问题描述】:
我最近在我的程序中发现它,重复并没有停止,即使我使用了 Set。 该对象称为 Category,具有两个变量。
import Foundation
import CoreData
extension Category {
@NSManaged var name: String?
@NSManaged var items: NSSet?
}
class Category: NSManagedObject {
override var hashValue: Int {
return name!.hashValue
}
}
func == (left: Category, right: Category) -> Bool {
return left.name == right.name
}
我已经覆盖了类中的 hashValue: Int 和 == 方法,但 Set 仍然将它们视为两个对象。这是否意味着 Set 不适用于 NSManagedObjects 或者我还有一些事情需要做?
这是我的单元测试代码:
guard let cate1 = NSEntityDescription.insertNewObjectForEntityForName("Category", inManagedObjectContext: context) as? MyProgram.Category else { return }
cate1.name = "Cate"
cate1.items = nil
guard let cate2 = NSEntityDescription.insertNewObjectForEntityForName("Category", inManagedObjectContext: context) as? MyProgram.Category else { return }
cate2.name = "Cate"
cate2.items = nil
let combine = Set<MyProgram.Category>([cate1, cate2])
assert(cate1.hashValue == cate2.hashValue)
assert(combine.count == 1)
它会在最后一行代码失败。 哪位知道原因的可以给我一些建议吗?
【问题讨论】:
标签: ios swift core-data set nsset