swift - 将对象插入字典时出现“如果没有 _objectID,则必须有 uuid”异常
问题描述
我正在为使用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 = 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
我对when 单元测试Photos
框架有同样的问题。覆盖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
}
}
推荐阅读
- uml - UML 中速度的依赖函数
- json - 尝试使用 REST.Json 将 json 转换为对象时,EConvert 异常无效日期时间
- powershell - 从 csv 文件中删除某些重复值
- c++ - Trying to find all prime numbers in a list
- python - 如何过滤数据框并立即制作一个子集 pandas
- java - `visitMethodCall` 没有在 lint 中被调用
- r - 在数据框中添加随机缺失和随机噪声
- wordpress - 如何在分类中显示 ACF 图像字段
- powershell - 使用 powerShell 问题在 AD 中允许/Denny logOnHours
- python - 使用日期时间和类别重新组合 pandas 数据框