我尝试使用此查询获取带有最大ID的ítem
realm.objects(Entity).filter("@max.id").first
它抛出一个错误,说无法解析查询,所以这似乎不是正确的方法。
如何在Realm for Swift上编写此查询?
答案 0 :(得分:8)
单独使用过滤器无法完成您之后的操作,因为它们一次只考虑一个顶级对象。
除了这个概念问题,您发布的代码存在一些问题:
@"@max.id"
不是有效的NSPredicate
format string。 NSPredicate
格式字符串必须由表达式之间的比较组成,而不是由表达式组成。
必须将集合运算符(例如@max
)应用于集合。在您的示例中,它将应用于Entity
。由于Entity
不是集合,因此谓词无效。将集合运算符应用于List
上的Entity
属性是有效的。
以下内容应该符合您的要求:
let entities = realm.objects(Entity)
let id = entities.max("id") as Int?
let entity = id != nil ? entities.filter("id == %@", id!).first : nil
答案 1 :(得分:2)
我正在使用Xcode 8.0和Swift 3.0
以下为我工作:
let allEntries = realm.objects(Model.self)
if allEntries.count > 0 {
let lastId = allEntries.max(ofProperty: "id") as Int?
return lastId! + 1
} else {
return 1
}
答案 2 :(得分:1)
Swift 4和Xcode 9.3
if let personWithMaxAge = realm.objects(Person.self).max(by: { $0.age > $1.age }) {
print(personWithMaxAge.age)
}