我有一个方法应该通过成功查询返回Results
,或者创建记录(如果它们不存在)。
类似的东西:
class MyObject: Object {
dynamic var token = ""
static let realm = try! Realm()
class func findOrCreate(token token: String) -> Results<MyObject> {
// either it's found ...
let tokenResults = realm.objects(MyObject.self).filter("token = '\(token)'")
if !tokenResults.isEmpty {
return tokenResults
}
// ... or it's created
let newObject = MyObject()
newObject.token = token
try! realm.write {
realm.add(newObject)
}
// However, the next line results in the following error:
// 'Results<_>' cannot be constructed because it has no accessible initializers
return Results(newObject)
}
}
也许我应该从这个方法返回[MyObject]
。尝试将其保留为Results
而不是Array
有什么好处吗?我想我已经失去了推迟评估的任何好处,因为我已经在方法中使用isEmpty
,对吗?
答案 0 :(得分:1)
Results
是自动更新视图到Realm中的基础数据,这就是您无法直接构建它的原因。因此,return Results(newObject)
代替return tokenResults
而应包含新添加的对象,因为Results
是自动更新视图。