如何在创建记录后创建结果?

时间:2016-09-17 12:57:32

标签: swift realm

我有一个方法应该通过成功查询返回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,对吗?

1 个答案:

答案 0 :(得分:1)

Results是自动更新视图到Realm中的基础数据,这就是您无法直接构建它的原因。因此,return Results(newObject)代替return tokenResults而应包含新添加的对象,因为Results是自动更新视图。