使用数组

时间:2017-02-15 05:34:33

标签: ios arrays swift scope uisearchbar

所以我有一个蔬菜对象,除了其他属性之外,还有一个数组foodArray看起来像这个["Stew, "Salad"]代表食物可以包含在哪个食谱中,["Eaten"]如果蔬菜不再存在在食品室里找到了。例如:

let carrot = Vegetable(name: "carrot", foodArray: ["Stew"])
let tomato = Vegetable(name: "tomato", foodArray: ["Salad"])
let onion = Vegetable(name: "onion", foodArray: ["Stew", "Salad"])
let corn = Vegetable(name: "corn", foodArray: ["Eaten"])

并且所有这些Vegetable对象都将存储在名为vegetables的蔬菜数组中。

我的问题是我是否可以使用此数组的值来设置过滤搜索。

我已经实现了SplitView并设置了搜索栏,并有一个包含Vegetable对象列表的表视图。我希望范围栏具有数组中找到的不同字符串(配方名称)。例如,“Stew”,“Salad”,“Eaten”为范围按钮,当用户在范围按钮内搜索时,将弹出foodArray中具有该按钮的所有蔬菜对象。

目前,除了我的范围的实现之外,我的代码工作正常。这是我到目前为止的代码:

func filterContentForSearchText(_ searchText: String, scope: String = "All") {
        filteredVegetables = vegetable.filter({( vegetable : Vegetable) -> Bool in
            let categoryMatch = (scope == "All") || (vegetable.foodArray == scope)
            return categoryMatch && vegetable.name.lowercased().contains(searchText.lowercased())
        })
        tableView.reloadData()
    }

有人可以告诉我如何修改这个filterContentForSearchText函数来搜索数组并让范围按钮成为数组中不同的可能值(假设它们只是上面列出的三个,即“吃掉” ,“沙拉”,“炖”)?我想维护我的故事板拆分视图设置。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您可以在contains方法searchBar(_:selectedScopeButtonIndexDidChange:)内使用filter UISearchBarDelegate

func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
     let food: String 
     if selectedScope == 0 {
          food = "Stew"
     }
     else if selectedScope == 1 {
          food = "Salad"
     }
     else {
          food = "Eaten"
     }
     filteredVegetables = vegetable.filter { $0.foodArray.contains(food) }
     self.tableView.reloadData()
}