【问题标题】:Searchbar an array of Dictionaries SwiftSearchbar 一系列字典 Swift
【发布时间】:2020-04-22 21:40:02
【问题描述】:

我遇到了一种被卡住的情况。 简而言之,我的任务是将 JSON 解析为(例如)UITableView 并通过本机 SearchBar 对其进行过滤。

JSON 看起来像这样:

{
   "title":"Two",
   "image":"Two.png"

    }

...等

解析后我得到一个字典数组,看起来像这样(分解后有更深入的理解)

imagesArray = [["title":"Two", "image":"Two.png"],["title":"Three Four", "image":"ThreeFour.png"],["title":"Five", "image":"Five.png"]]

我必须使用“标题”名称进行过滤。 虽然,我无法真正弄清楚如何通过字典数组使用本机 SearchBar 过滤,但我知道有办法。

或者,如果我解析为字典数组的整个概念是错误的,请随时纠正我并展示任何不同的方法:(

谢谢!

【问题讨论】:

    标签: arrays swift uisearchbar searchbar


    【解决方案1】:

    您可以将 JSON 解析为一个 dicts 数组,但是,我建议将数据解析为一个可编码结构或类的数组。

    let json = """
    [
    {
    "title":"Two",
    "image":"Two.png"
    
    }
    ]
    """
    
    struct Item: Codable {
        var title, image: String
    }
    
    if let jsonData = json.data(using: .utf8) {
        do {
            var items = try JSONDecoder().decode([Item].self, from: jsonData)
    
        } catch {
            print("Error: " + error.localizedDescription)
        }
    }
    
    class del: NSObject,UISearchBarDelegate {
        func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    
        }
    }
    

    一旦你有了对象数组,你就可以将它们过滤到一个新数组中,你可以像这样在 textDidChange UISearchBarDelegate 方法中将其用作 UITableView 的数据。

    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        let filteredItems = items.filter { (item) in
            item.title
                .lowercased()
                .contains(searchText.lowercased())
        }
    }
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:
      func searchFor(_ chars: String) -> [[String : String]] {
          return imagesArray.filter { ($0["title"]?.range(of: chars, options: .caseInsensitive) != nil) }
      }
      
      
      print(searchFor("th")) // [["title": "Three Four", "image": "ThreeFour.png"]]
      

      【讨论】:

      • 虽然这段代码可能会解决问题,但一个好的答案还应该解释代码的什么以及它如何提供帮助。
      猜你喜欢
      • 2020-11-11
      • 1970-01-01
      • 2021-04-09
      • 2021-10-01
      • 2017-06-09
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 2018-02-02
      相关资源
      最近更新 更多