Как отфильтровать табличное представление ПОСЛЕ преобразования значений? Ошибка LosslessStringConvertible - PullRequest
0 голосов
/ 13 июля 2020

Я делаю табличное представление сотрудников, которое показывает ТОЛЬКО идентификационный номер и полное имя, и моя цель состоит в том, чтобы иметь возможность фильтрации с использованием чисел ПОСЛЕ того, как они были преобразованы в строки. ? Просто я хочу показать им других сотрудников, которые начинаются с номеров строки поиска. Например, если они наберут «524», отобразится не только сотрудник 524 (если он / она существует), но также любой сотрудник, имя которого начинается с 524 в числовом поле.

Проблема: При попытке преобразовать int32 в строку я получаю ошибку LosslessStringConvertible.

Я «мог» переписать мою базу данных и класс, чтобы числа принимали строки вместо целых, НО Я пришлось бы заставить моих текущих конечных пользователей удалить все предыдущие данные SQL, что настоятельно не рекомендуется моим начальством.

Если у вас есть какие-либо вопросы, дайте мне знать.

У меня уже есть код для фильтрации по имени ниже.

     func filterContentForSearchText(_ searchText: String) {
            
            var number : String
        
        if(!isSearchBarEmpty){
        
        if(!isFilterByNumber){
            
            filteredemployee_list = employee_list.filter {
                $0?.employee_name.range(of: searchText, options: .caseInsensitive, range: nil, locale: nil) != nil
            }
                     
            employeeTableview.reloadData()
     
      }
    
      else{
             //Number filter      

 filteredemployee_list = employee_list.filter {
                String($0?.number).range(of: searchText, options: .caseInsensitive, range: nil, locale: nil) != nil

employeeTableview.reloadData()
        
            }
                
            else{
                 filteredemployee_list = employee_list
                 employeeTableview.reloadData()
            }

1 Ответ

1 голос
/ 13 июля 2020

Я думаю, что это необязательный элемент в String($0?.number), который вызывает у вас проблемы. Если вы сделаете следующее, это должно сработать.

filteredEmployees = employees.filter { employee in
   guard let employee = employee else {
      return false
   }
   let range = String(employee.number).range(
      of: searchText, 
      options: .caseInsensitive, 
      range: nil, 
      locale: nil
   )
   return range != nil
}

Я переименовал некоторые из ваших переменных и свойств в соответствии с передовыми практиками Swift.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...