Swift 在将对象插入字典时获取“如果没有_objectID,则必须有uuid”异常
我正在为一个使用PHAsset类型的类编写一个单元测试。我嘲笑它如下:Swift 在将对象插入字典时获取“如果没有_objectID,则必须有uuid”异常,swift,dictionary,hashable,Swift,Dictionary,Hashable,我正在为一个使用PHAsset类型的类编写一个单元测试。我嘲笑它如下: class PHAssetMock: PHAsset { let date: Date let uuid: UUID init(dateStr: String) { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "MM-dd-yyyy HH:mm" self.date =
class PHAssetMock: PHAsset {
let date: Date
let uuid: UUID
init(dateStr: String) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM-dd-yyyy HH:mm"
self.date = dateFormatter.date(from: dateStr)!
self.uuid = UUID()
}
override var creationDate: Date? {
return date
}
override var hash: Int {
let hash = Int(self.date.timeIntervalSinceNow)
return hash
}
static func ==(lhs: PHAsseMock, rhs: PHAsseMock) -> Bool {
return lhs.date.timeIntervalSinceNow == rhs.date.timeIntervalSinceNow
}
}
当使用模拟对象的函数尝试将其插入字典时,我得到一个异常:
func foo(assets: [PHAsset]) {
var label: [T: String]()
for asset in assets {
label[asset] = "undefined" // Exception: "NSInternalInconsistencyException", "Must have a uuid if no _objectID"
}
}
调试时,将调用覆盖哈希变量 我在单元测试框架时遇到了与PHAsset相同的问题。重写isEqual函数有助于消除异常
class Mock : PHAsset {
let _localIdentifier: String = UUID().uuidString
let _hash: Int = UUID().hashValue
override var localIdentifier: String {
return _localIdentifier
}
override var hash: Int {
return _hash
}
override func isEqual(_ object: Any?) -> Bool {
guard let object = object as? Mock else {
return false
}
return self.localIdentifier == object.localIdentifier
}
}