Ios 对计算属性上的域结果集合进行排序?

Ios 对计算属性上的域结果集合进行排序?,ios,swift,realm,computed-properties,Ios,Swift,Realm,Computed Properties,我在我的Swift iOS应用程序中使用Realm,我有一个模型,我正试图向其中添加一个计算属性。下面是该类的外观: class Conversation: Object { @objc dynamic var conversationId: String = generateConversationId() @objc dynamic var createdTime = Date() @objc dynamic var title: String = "" l

我在我的Swift iOS应用程序中使用Realm,我有一个模型,我正试图向其中添加一个计算属性。下面是该类的外观:

class Conversation: Object {

    @objc dynamic var conversationId: String = generateConversationId()
    @objc dynamic var createdTime = Date()
    @objc dynamic var title: String = ""
    let messages = List<Message>()

    var lastUpdated: Date {
        if let newestMessage = self.messages.sorted(byKeyPath: "timestamp", ascending: false).first {
            return newestMessage.timestamp
        } else {
            return Date(timeIntervalSince1970: 0)
        }
    }        
}
这可以正常工作,我可以按预期访问每个
对话
上的
lastUpdated
属性。但是,我希望此集合按
lastUpdated
属性排序,因此我尝试如下修改我的结果集合:

var conversations: Results<Conversation> = realm.objects(Conversation.self)
var conversations: Results<Conversation> = realm.objects(Conversation.self).sorted(byKeyPath: "lastUpdated", ascending: true)
我认为这可能是因为
lastUpdated
computed属性没有在
Conversation
对象上持久化(我会使用Realm Studio快速验证这一点,但我的领域是加密的)。我并没有明确忽略此属性,但我假设是这样的,因为与我的所有其他属性一样,
lastUpdated
没有使用
@objc dynamic
修饰。我尝试添加它,删除我的应用程序安装,重新编译和再次测试,但最终还是出现了相同的异常


可能无法持久化计算属性(因为它是计算的!),但是否有其他方法可以指定我的对话结果集合应按此属性排序?

正如您所怀疑的,您无法持久化计算属性和
领域
排序(按键路径:,升序:)
方法仅适用于持久化属性。无法基于计算属性对
结果
实例进行排序,同时保持自动更新
结果

但是,如果您不需要
结果的自动更新特性
,则有一种解决方法。您可以使用Swift的
sorted
方法,该方法将闭包作为其排序参数,这将产生
[Conversation]
类型的返回值:

let conversations = realm.objects(Conversation.self).sorted(by: {$0.lastUpdated < $1.lastUpdated})
let conversations=realm.objects(Conversation.self)。排序(按:{$0.lastUpdated<$1.lastUpdated})

感谢您的快速回复!不幸的是,我确实需要结果的自动更新功能(我还使用通知令牌来观察更改并相应地更新UITableView)。@bmt22033那么您为什么接受这个答案?我也有同样的问题,你找到另一个解决方案了吗?
let conversations = realm.objects(Conversation.self).sorted(by: {$0.lastUpdated < $1.lastUpdated})