[ad_1]
I’ve an array of strings inside a struct. This populates an inventory, and I take advantage of a .searchable to filter components there. I can filter them by textual content, date, or tags inside every merchandise. All performed with out regard for the case.
Now, for the tags, I am struggling to seek out the correct approach to filter them:
let dateFormatter = DateFormatter()
struct LibItem: Codable, Hashable, Identifiable {
let id: UUID
var textual content: String
var date = Date()
var dateText: String {
dateFormatter.dateFormat = "EEEE, MMM d yyyy, h:mm a"
return dateFormatter.string(from: date)
}
var tags: [String] = []
}
closing class DataModel: ObservableObject {
@AppStorage("myapp") public var collectables: [LibItem] = []
init() {
self.collectables = self.collectables.sorted(by: {
$0.date.examine($1.date) == .orderedDescending
})
}
func sortList() {
self.collectables = self.collectables.sorted(by: {
$0.date.examine($1.date) == .orderedDescending
})
}
}
struct ContentView: View {
@EnvironmentObject non-public var knowledge: DataModel
@State var searchText: String = ""
var physique: some View {
NavigationView {
Listing(filteredItems) { collectable in
VStack(alignment: .main) {
Spacer()
Textual content(collectable.textual content).font(.physique).padding(.main).padding(.backside, 1)
Spacer()
}
}
.listStyle(.plain)
.searchable(
textual content: $searchText,
placement: .navigationBarDrawer(displayMode: .at all times),
immediate: "Search..."
)
}
}
var filteredItems: [LibItem] {
change selectedItem {
case 1: // date
return knowledge.collectables.filter {
searchText.isEmpty ? true : $0.dateText.localizedCaseInsensitiveContains(searchText)
}
case 2: //tags <--- right here how do I search and filter by, case insensitive?
return knowledge.collectables.filter {
searchText.isEmpty ? true : $0.tags.comprises(searchText)
}
default:
return knowledge.collectables.filter {
searchText.isEmpty ? true : $0.textual content.localizedCaseInsensitiveContains(searchText)
}
}
}
}
[ad_2]
