当我尝试在我的应用中实现搜索栏时,出现错误“通话中的额外参数”。
我还阅读了其他问题,包括:
Swift - Extra Argument in call
Swift 4 “Extra argument in call” Rxswift
还有其他人却没有成功。
这是我的代码:
extension ViewController: UISearchBarDelegate {
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
todoItems = todoItems.filter("title CONTAINS[cd] %@", searchBar.text!).sorted(byKeyPath: "dateCreated", ascending: true) // Getting Error on this line
tableView.reloadData()
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchBar.text?.count == 0 {
loadItems()
DispatchQueue.main.async {
searchBar.resignFirstResponder()
}
}
}
}
答案 0 :(得分:1)
您正在混合使用NSPredicate
和filter
语法以及NSSortDescriptor
和sorted
语法。这行不通。
假设todoItems
是自定义结构或类的数组,本机Swift方式为
todoItems = todoItems.filter{ $0.title.range(of: searchBar.text!, options: [.caseInsensitive, .diacriticInsensitive]) != nil}
.sorted{ $0.dateCreated < $1.dateCreated}
注意:考虑到您将使用过滤后的数组覆盖包含所有项目的数组...