Dynamically filtering @FetchRequest with SwiftUI
Update 30/6/2022: I realised we shouldn’t be initing NSPredicate objects inside body so need a new approach.
I was reading Paul Hudson’s article Dynamically filtering @FetchRequest with SwiftUI and thought I would share an improvement for declaring the singers @FetchRequest property that supports a dynamic predicate for filtering:
FilteredList.swift
import SwiftUI
struct FilteredList: View {
    @FetchRequest<Singer> var singers: FetchedResults<Singer>
    var body: some View {
        List(singers, id: \.self) { singer in
            Text("\(singer.wrappedFirstName) \(singer.wrappedLastName)")
        }
    }
}
ContentView.swift
...
    var body: some View {
        VStack{
            // list of matching singers
            FilteredList(singers: FetchRequest(sortDescriptors: [], predicate: NSPredicate(format: "lastName BEGINSWITH %@", lastNameFilter)))
...