Панель поиска - фильтрация числовых значений в 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 возвращайте значения коллекции в зависимости от активного табличного представления.

Другие вопросы по тегам