如何获取具有最大ID的项目?

时间:2015-09-27 03:25:06

标签: ios swift realm

我尝试使用此查询获取带有最大ID的ítem

realm.objects(Entity).filter("@max.id").first

它抛出一个错误,说无法解析查询,所以这似乎不是正确的方法。

如何在Realm for Swift上编写此查询?

3 个答案:

答案 0 :(得分:8)

单独使用过滤器无法完成您之后的操作,因为它们一次只考虑一个顶级对象。

除了这个概念问题,您发布的代码存在一些问题:

  1. @"@max.id"不是有效的NSPredicate format stringNSPredicate格式字符串必须由表达式之间的比较组成,而不是由表达式组成。

  2. 必须将集合运算符(例如@max)应用于集合。在您的示例中,它将应用于Entity。由于Entity不是集合,因此谓词无效。将集合运算符应用于List上的Entity属性是有效的。

  3. 以下内容应该符合您的要求:

    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)
}