Hello,
On day 59, challenge 3, we are asked to " Make FilteredList accept an array of SortDescriptor objects to get used in its fetch request."
I could not compile it by using [SortDescriptor].
FilteredList.swift
import CoreData
import SwiftUI
struct FilteredList<T: NSManagedObject, Content: View>: View {
var fetchRequest: FetchRequest<T>
var singers: FetchedResults<T> { fetchRequest.wrappedValue }
enum PredicateType: String {
case beginsWith = "BEGINSWITH"
case contains = "CONTAINS"
case containsCI = "CONTAINS[c]"
}
var predicate = PredicateType.beginsWith
let content: (T) -> Content
var body: some View {
List(fetchRequest.wrappedValue, id: \.self) { singer in
self.content(singer)
}
}
init(nsType: Int, sortType: [SortDescriptor], filterKey: String, filterValue: String, @ViewBuilder content: @escaping (T) -> Content) {
if nsType == 0 {
predicate = .beginsWith
} else if nsType == 1 {
predicate = .contains
} else {
predicate = .containsCI
}
fetchRequest = FetchRequest<T>(entity: T.entity(), sortDescriptors: sortType, predicate: NSPredicate(format: "%K \(predicate.rawValue) %@", filterKey, filterValue))
self.content = content
}
}
In ContentView, I call FilteredList as below;
FilteredList(nsType: 0, sortType: [
SortDescriptor(\.lastName, order: .reverse)
], filterKey: "lastName", filterValue: lastNameFilter) { (singer: Singer) in
Text("\(singer.wrappedFirstName) \(singer.wrappedLastName)")
}