Problem
The following code doesn't work:
let predicate = #Predicate<Car> { car in
   car.size == size //This doesn't work
}
Console Error
Query encountered an error: SwiftData.SwiftDataError(_error: SwiftData.SwiftDataError._Error.unsupportedPredicate)
Root cause
Size is an enum, #Predicate works with other type such as String however doesn't work with enum
Enum value is saved however is not filtered by #Predicate
Environment
- Xcode: 15.0 (15A240d) - App Store
- macOS: 14.0 (23A339) - Release Candidate
Steps to reproduce
- Run the app on iOS 17 or macOS Sonoma
- Press the Add button
- Notice that the list remains empty
Expected behaviour
List should show the newly created small car
Actual behaviour
List remains empty inspite of successfully creating the small car.
Feedback
FB13194334
Code
Size
enum Size: String, Codable {
    case small
    case medium
    case large
}
Car
import SwiftData
@Model
class Car {
    let id: UUID
    let name: String
    let size: Size
    
    init(
        id: UUID,
        name: String,
        size: Size
    ) {
        self.id = id
        self.name = name
        self.size = size
    }
}
ContentView
struct ContentView: View {
    var body: some View {
        NavigationStack {
            CarList(size: .small)
        }
    }
CarList
import SwiftUI
import SwiftData
struct CarList: View {
    let size: Size
    
    @Environment(\.modelContext)
    private var modelContext
    @Query
    private var cars: [Car]
    
    init(size: Size) {
        self.size = size
        let predicate = #Predicate<Car> { car in
            car.size == size //This doesn't work
        }
        _cars = Query(filter: predicate, sort: \.name)
    }
    
    var body: some View {
        List(cars) { car in
            VStack(alignment: .leading) {
                Text(car.name)
                Text("\(car.size.rawValue)")
                Text(car.id.uuidString)
                    .font(.footnote)
            }
        }
        .toolbar {
            Button("Add") {
                createCar()
            }
        }
    }
    
    private func createCar() {
        let name = "aaa"
        let car = Car(
            id: UUID(),
            name: name,
            size: size
        )
        modelContext.insert(car)
    }
}
 
  
  
  
    
  
