【发布时间】:2026-01-17 04:45:02
【问题描述】:
在我的应用程序中,我构建了一个 SearchBar,它可以搜索多个单词而忽略顺序 Search for multiple words ignoring the order in Swift 5
导入基础
class Clinic {
var id = ""
var name = ""
var address = ""
var specialty1 = ""
var specialty2 = ""
}
在我的 textDidChange 我有
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
let searArr = searchText.lowercased().components(separatedBy: " ")
clinicsSearch = clinics.filter { item in
let lowName = item.name.lowercased()
let lowSp1 = item.specialty1.lowercased()
let lowSp2 = item.specialty2.lowercased()
let res = searArr.filter {
lowName.contains($0) ||
lowSp1.contains($0) ||
lowSp2.contains($0)
}
return !res.isEmpty
} // Credits to @Sh_Khan
使用上面的代码,我可以搜索任何键入的单词,与顺序无关,并且可以找到所有符合任何条件的条目。
我现在正在尝试从上面的内容构建一个变体......用例是
假设总共有 10 个诊所(第一诊所、第二诊所、第三诊所、第四诊所等)。其中,3 家是骨科医师,诊所名称分别为第一诊所、第二诊所和第三诊所。所以,我可以开始输入 Orthopedist(过滤到 3 个名字)。我现在想要我输入的下一个词来过滤我的选择(例如,输入 First 会将 3 个已显示的诊所过滤到符合此附加条件的诊所)。在我的示例中,这会将列表减少为一个诊所。
我试过改变 ||通过 && 我认为这已经足够了,但我得到了一个意想不到的行为。当我开始输入时,它只考虑第一个字母,然后从过滤器中删除所有内容。对于上面的例子,如果我输入“F”,它会带来 First Clinic,但是,如果我输入“Fi”,它什么也不会带来。我还考虑过创建多个过滤变量,但这可能会将输入的单词数限制为我创建的变量数。
我想要的可行吗?
【问题讨论】: