Swift 可以在域中的筛选器中使用@max吗?
我有一个目标,比如说Swift 可以在域中的筛选器中使用@max吗?,swift,realm,Swift,Realm,我有一个目标,比如说 class Task:Object { dynamic var id:Int = 0 dynamic var name:String = "" override func primaryKey() -> String { return "id" } } 当我使用过滤器与最大 let tasks = realm.allObjects(ofType: Task.self) let results = tasks.filt
class Task:Object {
dynamic var id:Int = 0
dynamic var name:String = ""
override func primaryKey() -> String {
return "id"
}
}
当我使用过滤器与最大
let tasks = realm.allObjects(ofType: Task.self)
let results = tasks.filter(using: "id.@max")
我得到了一个错误:
无法分析格式字符串“id.@max”
然后我意识到我应该使用
let results = tasks.filter(using: "id == id.@max")
然后我又犯了一个错误:
由于未捕获异常“无效谓词”而终止应用程序,原因:
'聚合操作只能在包含
数组属性'
现在我想知道如果我想在过滤器中使用@max,我能做什么
我知道我可以使用
排序
来获取具有最大id的任务。但我想知道我是否可以将其与筛选器一起使用。因为在id
上使用@max是不可能的。答案是否定的。@max
只能使用in-List属性或类似属性,id
为Int。要检索id最大的任务,可以执行以下操作:
let tasks = realm.allObjects(ofType: Task.self)
let id = tasks.maximumValue(ofProperty: "id") as Int?
let newestTask = realm.object(ofType: Task.self, forPrimaryKey: id)
@max
不起作用的原因是它计算为集合成员的属性的最大值,但谓词是在每个单独项的上下文中计算的。我认为您应该查看Realm中的NSPredicate备忘单。关于在querys上使用@max
有一些内容:@Orlando谢谢。现在我知道@max不能用在id
上,因为它的类型不是List或类似的东西。