如何将RealmSwift中的List转换为Results?

11

我正在使用 Realm 的 List/Results 作为我的 UITableView 的 dataSource。在某个时刻,我会将列表分配给它,就像这样:

var dataSource:List<SomeObject>! // Or >> Results<SomeObject>!
let aRealmObject =  realm.objectForPrimaryKey(SomeObject.self, key: objectId) 
dataSource = aRealmObject.someList // dataSource should be List

然后我对这个列表进行筛选,如果用户更改了筛选日期,我会像这样处理:

dataSource = dataSource.filter("FILTER THE DATES",newDates) // dataSource should be Results

但是上面的代码会导致错误,因为filter的返回类型是一个Results对象,而aRealmObject.someList是一个列表。

处理这种情况的最佳方法是什么?

  • dataSource作为List并将Results对象转换为List?如何实现?
  • dataSource作为Results并将List转换为Results?如何实现?
  • 或者你有更好的方法,请与我分享。

谢谢,

2个回答

14

我已经找到了一种简单的方法,可以利用过滤器方法将 List 转换为Results 对象,它总是返回 Results 对象。只需给它一个真的谓词。

   dataSource = aRealmObject.someList.filter("TRUEPREDICATE") //this is a Results object.

我担心这样做会产生不必要的开销,因为需要迭代并可能导致每个对象出现故障。 - bcause
1
我同意这会是不必要的工作来迭代列表,但我认为这不会很明显,除非你的列表中有500k条记录。 - Ismail

9

ListResults(以及LinkingObjects)均可转换为AnyRealmCollection类型。我认为这可能是标准化所有Realm数组类型的最佳方式:

var dataSource:AnyRealmCollection!
let aRealmObject = realm.objectForPrimaryKey(SomeObject.self, key: objectId) 
dataSource = AnyRealmCollection(aRealmObject.someList)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接