Modeling & querying with SwiftData

@Model classes are reference types β€” and that's the point

Every model you've written since Module 2 β€” Walker, Booking β€” has been a struct: a value type. Copy a Walker and you get two independent walkers; mutate one, the other is untouched. @Model types are different on purpose: @Model final class WalkRecord is a reference type. Copy the reference and both variables point at the same object β€” mutate it through one, the other sees the change immediately.

That's not a limitation, it's why @Query works at all. SwiftData needs identity: one WalkRecord living in the database, with SwiftUI watching that specific object for mutations so it can redraw the instant a property changes. A struct copy would break that β€” there'd be no single object left to watch. This is why @Model types are classes, never structs β€” and by convention marked final, unless you specifically need a subclassable model hierarchy.