如何让用户根据两个条件进行搜索
How to allow users to search based on two criteria
我正在尝试实现一个搜索栏,用户可以在其中根据姓名或职业搜索某人。我在下面编写了函数,但应用程序在使用 OR 运算符的 return 语句处崩溃。是否有一种适当的方法来编写此函数以允许两种可能性——根据输入一个人的姓名或他们的职业来获得结果?注意:我使用的是Firebase来存储用户信息;姓名和职业有各自独立的字段和对应的值。
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.isEmpty || searchText == " " {
inSearchMode = false
tableView.reloadData()
} else {
inSearchMode = true
filteredUsers = users.filter({ (user) -> Bool in
return user.name.contains(searchText) || user.occupation.contains(searchText)
})
tableView.reloadData()
}
}
您似乎得到了 nil 值,因为职业是可选的,因此您可以按如下方式重构您的函数:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.isEmpty || searchText == " " {
inSearchMode = false
tableView.reloadData()
} else {
inSearchMode = true
filteredUsers = users.filter({ (user) -> Bool in
if let occupation = user.occupation {
return occupation.contains(searchText)
}
if let name = user.name {
return name.contains(searchText)
}
return false
})
tableView.reloadData()
}
}
您可以试试这个来防止 nil 错误:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.isEmpty || searchText == " " {
inSearchMode = false
tableView.reloadData()
} else {
inSearchMode = true
filteredUsers = users.filter({ (user) -> Bool in
return (user.name.contains(searchText) == true) || (user.occupation.contains(searchText) == true)
})
tableView.reloadData()
}
}
尝试像这样编辑您的代码:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)
{
if searchText.isEmpty || searchText == " " {
inSearchMode = false
} else {
inSearchMode = true
filteredUsers = users.filter({ (user) -> Bool in
return (user.name?.contains(searchText) ?? true) || (user.occupation?.contains(searchText) ?? true)
})
}
tableView.reloadData()
}
我正在尝试实现一个搜索栏,用户可以在其中根据姓名或职业搜索某人。我在下面编写了函数,但应用程序在使用 OR 运算符的 return 语句处崩溃。是否有一种适当的方法来编写此函数以允许两种可能性——根据输入一个人的姓名或他们的职业来获得结果?注意:我使用的是Firebase来存储用户信息;姓名和职业有各自独立的字段和对应的值。
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.isEmpty || searchText == " " {
inSearchMode = false
tableView.reloadData()
} else {
inSearchMode = true
filteredUsers = users.filter({ (user) -> Bool in
return user.name.contains(searchText) || user.occupation.contains(searchText)
})
tableView.reloadData()
}
}
您似乎得到了 nil 值,因为职业是可选的,因此您可以按如下方式重构您的函数:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.isEmpty || searchText == " " {
inSearchMode = false
tableView.reloadData()
} else {
inSearchMode = true
filteredUsers = users.filter({ (user) -> Bool in
if let occupation = user.occupation {
return occupation.contains(searchText)
}
if let name = user.name {
return name.contains(searchText)
}
return false
})
tableView.reloadData()
}
}
您可以试试这个来防止 nil 错误:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.isEmpty || searchText == " " {
inSearchMode = false
tableView.reloadData()
} else {
inSearchMode = true
filteredUsers = users.filter({ (user) -> Bool in
return (user.name.contains(searchText) == true) || (user.occupation.contains(searchText) == true)
})
tableView.reloadData()
}
}
尝试像这样编辑您的代码:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)
{
if searchText.isEmpty || searchText == " " {
inSearchMode = false
} else {
inSearchMode = true
filteredUsers = users.filter({ (user) -> Bool in
return (user.name?.contains(searchText) ?? true) || (user.occupation?.contains(searchText) ?? true)
})
}
tableView.reloadData()
}