Saturday, October 31, 2026
HomeiOS Developmentios - Case incensitive filter searchable textual content in an array of...

ios – Case incensitive filter searchable textual content in an array of strings

[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]

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments