Swift 4.0中如何筛选结构体数组

3

我希望能够通过搜索栏来筛选一个结构体数组。我知道如何筛选一个字符串数组,但是很遗憾我不知道如何在结构体数组上应用这个方法。以下是我已经完成的部分:

var BaseArray: [dataStruct] = []

var filteredArray: [dataStruct] = []

BaseArray是一个包含多个变量的结构体数组。我的目标是筛选出所有变量。有什么想法吗?

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()
    }
}

我认为你差不多懂了,filter调用中花括号内的表达式可以使用&&/||运算符进行扩展(只要它返回true或false)。这是你想要的吗? - Alex
1个回答

8

您需要使用 OR / union 运算符将正面结果组合以包含在筛选数组中:

因此,您的筛选函数将如下所示:

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

如果nameanotherProperty 或者 yetAnotherProperty 中任意一个等于你要搜索的文本,那么结果就会被列出来。

此外,你可能希望根据输入文本包含下一个文本进行过滤,而不需要像你的示例一样完全匹配。在这种情况下,你的过滤函数将变成:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接