之前的三个坑都是很久远的事情了。今天要填一个新坑。
我们知道,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
,就需要改成其它的方式。