我添加了一个搜索栏,可以成功搜索菜单名称。但是,菜单价格根本没有过滤,我不知道如何控制这两个数组,当我搜索并得到菜单[“a”,“c”]的结果时,价格数组显示与菜单数组对应的价格;价格 [“a 的价格”,“c 的价格”]。该列表显示三个对象;菜单图像、菜单名称和价格。
var menu = ["Ice Tea (Large)", "Ice Tea (Small)", "Green Apple Refresher (Large)","Green Apple Refresher (Small)", "Peach Refresher (Large)", "Peach Refresher (Small)"]
var price = ["Rs.80", "Rs.50", "Rs.110", "Rs.80", "Rs.110", "Rs.80"]
var currentMenuNameArray = [String]()
class myMenu: UITableViewController, UISearchBarDelegate
{
@IBOutlet weak var tdMenuSearchBar: UISearchBar!
override func viewDidLoad()
{
super.viewDidLoad()
tdMenuSearchBar.delegate = self
currentMenuNameArray = menu
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return currentMenuNameArray.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as!TigersDenTableViewCell
cell.tdMenuImage.image = UIImage(named:currentMenuNameArray[indexPath.row] + ".jpg")
cell.tdMenuName.text = currentMenuNameArray[indexPath.row]
cell.tdMenuPrice.text = price[indexPath.row]
return cell
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
return 100
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)
{
guard !searchText.isEmpty else {
currentMenuNameArray = menu
tableView.reloadData()
return
}
currentMenuNameArray = menu.filter( { (menu:String) -> Bool in menu.lowercased().contains(searchText.lowercased())
})
tableView.reloadData()
}
}
最佳答案
您可以zip
(因为您提到价格数组显示与菜单数组对应的价格
)两个数组,过滤器
通过 menu
值得到两个过滤后的数组。
let searchString = "Green"
let menu = ["Ice Tea (Large)", "Ice Tea (Small)", "Green Apple Refresher (Large)","Green Apple Refresher (Small)", "Peach Refresher (Large)", "Peach Refresher (Small)"]
let price = ["Rs.80", "Rs.50", "Rs.110", "Rs.80", "Rs.110", "Rs.80"]
let result = zip(menu, price).filter { menuItem, _ in
menuItem.lowercased().contains(searchString.lowercased())
}
print(result) // array of tuples [("Green Apple Refresher (Large)", "Rs.110"), ("Green Apple Refresher (Small)", "Rs.80")]
let filteredMenu = result.map({ $0.0 })
let filteredPrice = result.map({ $0.1 })
print(filteredMenu, filteredPrice) // two separate arrays ["Green Apple Refresher (Large)", "Green Apple Refresher (Small)"] ["Rs.110", "Rs.80"]
关于swift - xcode TableView Controller 搜索多个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48163789/