Ios 如何允许用户基于两个条件进行搜索
我正在尝试实现一个搜索栏,用户可以根据姓名或职业搜索某人。我编写了下面的函数,但应用程序在返回语句时使用OR运算符崩溃。有没有一种合适的方法来编写这个函数来同时考虑这两种可能性——根据输入的姓名或职业来获取结果?注意:我使用Firebase存储用户信息;名称和职业有各自独立的字段和相应的值Ios 如何允许用户基于两个条件进行搜索,ios,swift,firebase,uisearchbar,Ios,Swift,Firebase,Uisearchbar,我正在尝试实现一个搜索栏,用户可以根据姓名或职业搜索某人。我编写了下面的函数,但应用程序在返回语句时使用OR运算符崩溃。有没有一种合适的方法来编写这个函数来同时考虑这两种可能性——根据输入的姓名或职业来获取结果?注意:我使用Firebase存储用户信息;名称和职业有各自独立的字段和相应的值 func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { if searchT
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()
}
我看没问题。崩溃日志/堆栈跟踪显示了什么?您得到了什么错误…?线程1:致命错误:在隐式展开可选值时意外发现nil。不确定这里出了什么问题,因为它在没有OR语句的情况下实现时可以正常工作。occupation是nil,那么在这种情况下,我猜occupation字段在您的数据结构中是可选的。此解决方案似乎有意义,但会引发以下错误:在预期返回'Bool'的闭包中缺少返回