我最近在我的程序中發現它,重複不停止,即使我使用Set。 該對象稱爲Category,具有兩個變量。Set不適用於NSManagedObject?
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)
它會在最後一行代碼失敗。 任何知道原因的人都能給我一些建議嗎?
非常感謝,它有幫助! –