I'm tryig to get the ítem with max id using this query
realm.objects(Entity).filter("@max.id").first
It's throwing an error saying that can't parse query so it seems this is not the correct way to do it.
How can I write this query on Realm for Swift?
Filters alone cannot do what you're after as they only consider a single top-level object at a time.
Beyond that conceptual issue, there are a few issues with the code you posted:
@"@max.id"
is not a valid NSPredicate
format string. NSPredicate
format strings must be composed of comparisons between expressions, not expressions on their own.
Collection operators such as @max
must be applied to a collection. In your example it is being applied to an Entity
. Since an Entity
is not a collection, the predicate would not be valid. It would be valid to apply a collection operator to a List
property on Entity
though.
Something like the following should do what you're after:
let entities = realm.objects(Entity)
let id = entities.max("id") as Int?
let entity = id != nil ? entities.filter("id == %@", id!).first : nil
I'm using Xcode 8.0 and Swift 3.0
Following worked for me:
let allEntries = realm.objects(Model.self)
if allEntries.count > 0 {
let lastId = allEntries.max(ofProperty: "id") as Int?
return lastId! + 1
} else {
return 1
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With