搜索栏一系列字典Swift

时间:2020-04-22 21:40:02

标签: arrays swift uisearchbar searchbar

我遇到了卡住的情况。 简化一下,我的任务是将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"]]

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

或者如果我解析为Dicts数组的整个概念是错误的,请随时纠正我并显示任何其他方法:(

谢谢!

2 个答案:

答案 0 :(得分:0)

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

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())
    }
}

希望这会有所帮助。

答案 1 :(得分:0)

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"]]