首页 > 解决方案 > 转换值后如何过滤表视图?LosslessStringConvertible 错误

问题描述

我正在制作一个仅显示 ID 号和全名的员工表格视图,我的目标是在将数字转换为字符串后使用数字进行过滤。

为什么我要转换它们?很简单,我想向他们展示以搜索栏编号开头的其他员工。例如,如果他们输入“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()
            }

标签: iosswiftuitableviewfiltering

解决方案


我认为这是可选的,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 最佳实践。


推荐阅读