过滤Swift 4.0中的结构数组

时间:2018-03-21 21:51:10

标签: arrays swift struct

我想通过searchBar过滤一系列结构。我知道如何过滤字符串数组,但不幸的是我无法在结构数组上应用它。这是我已经做过的事情:

var BaseArray: [dataStruct] = []

var filteredArray: [dataStruct] = []

BaseArray是一个包含多个变量的Structs数组。我的目标是过滤所有变量。有什么想法吗?

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    if searchBar.text == nil || searchBar.text == ""{
        isSearching = false
        view.endEditing(true)
        tableView.reloadData()
    }
    else{
        isSearching = true

        filteredArray = BaseArray.filter { $0.name == searchText }

        tableView.reloadData()
    }
}

1 个答案:

答案 0 :(得分:2)

您需要使用OR / union运算符将积极结果合并到过滤后的数组中:||

所以你的过滤器功能将如下所示:

filteredArray = BaseArray.filter { 
    $0.name == searchText
        || $0.anotherProperty == searchText
        || $0.yetAnotherProperty == searchText
}

这样,如果nameanotherPropertyyetAnotherProperty等于您要搜索的文字,则会列出结果。

此外,您可能希望根据包含下一个的输入文本进行过滤,而不需要与示例中的完全相同。在这种情况下,您的过滤器功能将变为:

filteredArray = BaseArray.filter {
    $0.name.contains(searchText)
        || $0.anotherProperty.contains(searchText)
        || $0.yetAnotherProperty.contains(searchText)
}