Swift UISearchbar как искать свойство класса - PullRequest
1 голос
/ 26 октября 2019

Я пытаюсь реализовать UISearchBar, используя swift, и все примеры, которые я могу найти, связаны с поиском в массиве строк.

Используя случайный пример, допустим, у меня есть класс, названный «Автомобиль» со свойствами «производитель» и «модель»

У меня есть массив автомобилей с именем «Автомобили»

Я хотел бы реализовать панель поиска, которая бы фильтровала результаты, сравнивая строку со свойством «изготовителя» в массиве Cars.

Пока что я могу подключить все остальное, что касается отфильтрованных результатов. массив, результаты просмотра таблицы и т. д. Я не могу обойти этот бит:

  filteredManufacturers = Cars.filter({ (text) -> Bool in
        let tmp: NSString = text as NSString
        let range = tmp.range(of: searchText, options: NSString.CompareOptions.caseInsensitive)

return range.location! = NSNotFound})

У меня проблема в том, что я не знаюкак ссылаться только на свойство класса. Если я введу:

filteredManufacturers = Cars.manufacturers.filter....

, возникнет проблема, связанная с отсутствием свойства «производители» для «Автомобили» и if. Я меняю это. и попытаться сослаться на. Свойство класса 'Car.manufacturers', то, очевидно, это не все. фактических данных автомобиля там для фильтрации. У кого-нибудь есть предложения?

Полагаю, одним из способов является копирование данных всех производителей в массив, и я могу выполнить поиск по нему, но затем я должен обратиться к. начальные индексы для ссылки на их класс и. кажется давно раненым.

1 Ответ

0 голосов
/ 26 октября 2019

Во-первых, ваш оригинальный подход может быть переписан без использования Objective-C NSString материал:

filteredManufacturers = Cars.filter {
    $0.lowercased().contains(searchText.lowercased())
}

Поиск по производителям может быть очень похожим образом:

filteredManufacturers = Cars.filter {
    $0.manufacturer.lowercased().contains(searchText.lowercased())
}

(при условии, что есть свойство экземпляра с именем manufacturer типа String в Car)

...