swift - xcode TableView Controller 搜索多个数组

标签 swift xcode uitableview

我添加了一个搜索栏,可以成功搜索菜单名称。但是,菜单价格根本没有过滤,我不知道如何控制这两个数组,当我搜索并得到菜单[“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/

相关文章:

ios - 如何使用正确的分辨率图像填充 UITableViewCell?

swift - UIAlertAction 在其回调中关闭 UIAlertController

带有 AVCaptureVideoDataOutput 的 iOS 应用程序在 App Store 版本中崩溃

swift - 在 View Controller 之间添加一个后退栏按钮

ios - 在无效的 indexPath 处捕获了对 rect 的 NSInternalInconsistencyException 请求

swift - 如何从动态表中连接到多个 View Controller ?

ios - Xcode 10 : Load the same . 项目目标和单元测试目标中的xml文件

ios - 判断 UITableView 是否已经滚动到顶部

objective-c - 如何在 Objective C 而不是 Swift 中生成 NSManagedObject 类?

ios - Objective C - cellForRowAtIndexPath 单元格永远不会为零?