肇鑫的技术博客

业精于勤,荒于嬉

Realm的坑(四)

之前的三个坑都是很久远的事情了。今天要填一个新坑。

我们知道,Realm.objects(_)返回的值是Results<T>,由于Realm自身的特性,Results<T>是很有用的,它是lazy动态的。因此,在使用Realm的时候,我们更喜欢使用Results<T>而不是Array

但是Results<T>有一个问题,就是它的排序功能十分有限。它最基本的排序只有一个函数,即sorted(byKeyPath:ascending:)。也就是说,Results<T>只能按照Realm对象的动态属性排序,而不能使用我们经常用到的closure排序。

分析

这就使得我们在有些时候,为了排序的方便,要么增加磁盘占用,添加额外的动态属性;要么,就只能使用Array类型。

值得一提的是,有时,如果是涉及到当前时间这一类的排序变量,即便我们使用额外的动态属性,也是不能排序的。因为这个值一直在变。因此就只能使用Array类型。

didSet不执行的问题

特别的,我们需要注意,在Realm的动态属性中,didSet是不会执行的,这应该是和Objective-C的运行时相关。因此,如果需要使用didSet,就需要改成其它的方式。

参考资料

相关