2016-09-17 70 views
0

我有一个方法,应该返回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

Results是一个自动更新查看到Realm中的底层数据,这就是为什么你不能直接构造它。因此,return Results(newObject)而不是return Results(newObject),您应该return tokenResults,它将包含您新添加的对象,再次因为Results是一个自动更新视图。

+0

啊对,谢谢!我在想,也许我应该能够创建一个'Results',就好像它是一个简单的主键查询一样,只是为了让成功的案例不必失去作为'Results'返回的能力。但是,当然,现在看起来很明显。再次感谢! – solidcell