@Query macro vs Query struct

I have spent hours trying to get @Query macros to compile. Mostly they throw up meaningless errors for example the following produces 3 compiler errors:

@Query var stylesheets: [StyleSheet]

Here's the expansion.

The compiler complains that 'private' can't be used here, and it can't find _stylesheets. I searched everywhere to find a resolution then I came across the Query struct. I used it as follows to replace the @Query:

    let query = Query(FetchDescriptor<StyleSheet>(), animation: .smooth)
    let styleSheets = query.wrappedValue

This also solves another issue that was bugging me - how to get the context when the environment variable is often rejected. All I need to do now is write:

let context = query.modelContext

None of the WWDC23 SwiftData videos mentions the use of the struct, which is a shame. It feels much like the CoreData approach to fetching data.

I hope this helps some of you.

  • No issues here. Is your StyleSheet type annotated with @Model?

Add a Comment