Панель поиска - фильтрация числовых значений в swift
Я пытаюсь выяснить, как отфильтровать данные табличного представления на основе числового значения, введенного в строке поиска. например, у меня есть табличное представление со списком людей, и я хочу отобразить людей, которым около 20 лет..... любая помощь будет принята с благодарностью
Я мог искать Числовые значения, как советовал Раджив, преобразовав строку в double. ниже мой код. func filtercontentForSearchText (searchText: String) {
var searchNumber = NSNumberFormatter().numberFromString(searchText)?.doubleValue
filteredCandies = candies.filter({ (candy : Candy) -> Bool in
candy.cal < searchNumber
})
}
Это работает для <, == и> фильтрации. моей конечной целью является поиск диапазона данных от 0,9 х введенного значения до 1,1 х введенного значения. При добавлении какой-либо арифметической операции в searchNumber (скажем, 0.9*searchNumber) я получаю сообщение об ошибке "Double? Is unwrapped". и если я разверну его, произойдет ошибка компиляции, но во время работы, как только я коснусь строки поиска, программа существует, и она говорит: "Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения". Любая помощь в решении этого будет высоко ценится
2 ответа
Я решил эту проблему со следующими изменениями. Вот мой исправленный код
func filtercontentForSearchText (searchText: String) {
var searchNumber = NSNumberFormatter().numberFromString(searchText)?.doubleValue
if searchNumber != nil {
filteredCandies = candies.filter({ (candy : Candy) -> Bool in
candy.cal > searchNumber! * 0.9 &&
candy.cal < searchNumber! * 1.1
})
}
}
Перейдите по этой ссылке и добавьте панель поиска над таблицей.
http://www.raywenderlich.com/76519/add-table-view-search-swift
в shouldReloadTableForSearchString
Метод делегата, вы получите строку поиска, которую ввел пользователь. Это также поможет включить только цифровую клавиатуру. Преобразуйте это в число и отфильтруйте вашу модель в отдельную коллекцию. После этого в ваших методах cellForRowAtIndexPath и numberOfRows возвращайте значения коллекции в зависимости от активного табличного представления.