如何使用 UISearchBar 同时按 2 个参数进行搜索
How to search by 2 parameters at the same moment using UISearchBar
我正在使用 UISearchBar 来搜索用户。用户有用户名和显示名。现在我使用这段代码通过参数 "username" 进行搜索,如何同时通过 "displayname" 进行搜索?搜索结果应包含两个参数
var timer: Timer?
var filteredUsers = [User]()
var users = [User]()
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
timer?.invalidate()
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: false, block: { [weak self] (timer) in
if searchText.isEmpty {
self?.filteredUsers = (self?.users)!
} else {
self?.filteredUsers = (self?.users.filter { (user) -> Bool in
return user.username.lowercased().contains(searchText.lowercased())
})!
}
self?.tableView?.reloadData()
})
}
过滤用户时,您只需使用 'or' 逻辑运算符将这两个条件都包括在内进行检查。让您的过滤结果看起来像这样:
self?.filteredUsers = (self?.users.filter { (user) -> Bool in
return (
user.username.lowercased().contains(searchText.lowercased()) ||
user.displayname.lowercased().contains(searchText.lowercased())
)
})!
我正在使用 UISearchBar 来搜索用户。用户有用户名和显示名。现在我使用这段代码通过参数 "username" 进行搜索,如何同时通过 "displayname" 进行搜索?搜索结果应包含两个参数
var timer: Timer?
var filteredUsers = [User]()
var users = [User]()
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
timer?.invalidate()
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: false, block: { [weak self] (timer) in
if searchText.isEmpty {
self?.filteredUsers = (self?.users)!
} else {
self?.filteredUsers = (self?.users.filter { (user) -> Bool in
return user.username.lowercased().contains(searchText.lowercased())
})!
}
self?.tableView?.reloadData()
})
}
过滤用户时,您只需使用 'or' 逻辑运算符将这两个条件都包括在内进行检查。让您的过滤结果看起来像这样:
self?.filteredUsers = (self?.users.filter { (user) -> Bool in
return (
user.username.lowercased().contains(searchText.lowercased()) ||
user.displayname.lowercased().contains(searchText.lowercased())
)
})!