gpt4 book ai didi

IOS Swift 从数组中搜索表

转载 作者:搜寻专家 更新时间:2023-10-31 22:29:58 24 4
gpt4 key购买 nike

我刚刚开始学习 swift,我正在查看 tableview 和 searchbar 功能。下面我有我的数组,它是水果列表:

var fruits: [[String]] = [["Apple", "Green"],["Pear", "Green"], ["Banana", "Yellow"], ["Orange", "Orange"]]

我将它们放在表格 View 中,以水果的名称作为标题,以颜色作为副标题。我正在尝试使用搜索栏进行过滤,但我似乎做对了。我只想搜索水果的名称而不是颜色。

var filteredFruits = [String]()
var shouldShowSearchResults = false

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

filteredFruits.removeAll()

var i = 0
while i < fruits.count
{
var filteredFruits = fruits[i].filter ({ (fruit: String) -> Bool in
return fruit.lowercased().range(of: searchText.lowercased()) != nil
})
if searchText != ""
{
shouldShowSearchResults = true

if filteredItems.count > 0
{
filteredFruits.append(filteredItems[0])
filteredItems.removeAll()
}
}
else
{
shouldShowSearchResults = false

}

i += 1
}

self.tableView.reloadData()
}

我确实得到了返回结果,但它混淆了字幕和标题,并且没有返回正确的结果。谁能指出我正确的方向?

最佳答案

我不明白为什么要使用某种 while 循环遍历 fruits。相反,我建议您利用以下功能:

func filterFruits(searchText: String) -> [[String]] {
guard searchText != "" else {
return fruits
}
let needle = searchText.lowercased()
return fruits.filter {fruitObj in
return fruitObj.first!.lowercased().contains(needle)
}
}

该函数返回名称中包含 searchText 的所有水果。

filterFruits(searchText: "g") yields [["Orange", "Orange"]]

如果您想搜索所有属性,请使用类似:

func filterFruits(searchText: String) -> [[String]] {
guard searchText != "" else {
return fruits
}
let needle = searchText.lowercased()
return fruits.filter {fruitObj in
return fruitObj.contains { attribute in
attribute.lowercased().contains(needle)
}
}
}

filterFruits(searchText: "g") yields [["Apple", "Green"], ["Pear", "Green"], ["Orange", "Orange"]]

为了让您在未来走上正轨:您真的应该引入一个 Fruit 类,它包含一个特定水果实例的所有相关信息。然后您可以使用第一个函数并执行类似 fruitObj.matches(searchText) 的操作,您在 Fruit 类中定义一个 func 来确定是否水果与搜索匹配。

关于IOS Swift 从数组中搜索表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40547613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com