我想在搜索栏中更好地过滤我的结果。
我有我的数组包含:
[["object": "Ball", "color": "Red"], ["object": "Ball", "color": "Blue"], ["object": "Square", "color": "Red"]]
当我搜索Ball所有的球出现时,但是当我添加红色(球红色)然后它也显示方块时,我希望它只显示一个包含Ball和Red两个单词的对象,而不是显示只包含其中一个的对象单词球或红色。可以这样做吗?
以下是我的代码。
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
let splitText = searchText.split(separator: " ")
filteredVehicles = posts.filter {
if let s = $0["object"] as? String, splitText.index(of: Substring(s)) != nil {
return true
}
if let s = $0["color"] as? String, splitText.index(of: Substring(s)) != nil {
return true
}
return false
}
}
使用此功能,您还可以使用反向顺序进行搜索(“蓝色球” - >“球蓝色”)。
let splitText = searchText.split(separator: " ")
let filteredObjects = objects.filter {
var include = false
for text in splitText {
if let s = $0["object"], text.contains(s) {
include = true
continue
}
if let s = $0["color"], text.contains(s) {
include = true
continue
}
return false
}
return include
}
将您的代码更改为以下
let splitText = searchText.split(separator: " ")
filteredVehicles = posts.filter {
if splitText.count > 1 {
return ($0["color"]?.contains(splitText[0]))! && ($0["object"]?.contains(splitText[1]))!
} else if splitText.count == 1 {
return ($0["object"]?.contains(splitText[0]))!
}
return false
}
1.像这样更新过滤条件
let filter = dict.filter {
var isPassed = false
let split = searchText.components(separatedBy: .whitespaces)
if split.count > 1 {
if ($0["object"]!.contains(split[0]) && $0["color"]!.contains(split[1])) || ($0["object"]!.contains(split[1]) && $0["color"]!.contains(split[0])) {
isPassed = true
}
} else {
if $0["object"]!.contains(split[0]) || $0["color"]!.contains(split[0]) {
isPassed = true
}
}
return isPassed
}