这是我的代码:
var data = [list]()
var filtered = [list]()
struct list {
var label1 : String = ""
var label2 : String = ""
var label3 : String = ""
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filtered = data.filter { $0.label1.localizedCaseInsensitiveCompare(searchText) }
if(filtered.count == 0){
searchActive = false;
} else {
searchActive = true;
}
self.tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)
我从 sql 查询结果添加到列表,它们看起来很好,但是当我尝试实现搜索功能时,我无法构建它并出现错误:
无法将“ComparisonResult”类型的值转换为关闭结果类型“Bool”
请注意,filter(_:)接受闭包,应该返回Bool值:
func filter(_ isIncluded: (Element) throws -> Bool) rethrows -> [Element]
Run Code Online (Sandbox Code Playgroud)
据此,尝试查看 的结果localizedCaseInsensitiveCompare。它返回ComparisonResult,而不是Bool。因此,您应该将它与某种ComparisonResult类型的东西(即.orderedAscending.,.orderedSame或.orderedDescending)进行比较。
例子:
let filtered = data.filter {
$0.label1.localizedCaseInsensitiveCompare(searchText) == .orderedAscending
}
Run Code Online (Sandbox Code Playgroud)
更新。
localizedCaseInsensitiveCompare真的是关于sorting。如果您想通过某些查询过滤数据并且大小写无关紧要,我建议您.lowercased()同时执行data.label1和searchText:
let filtered = data.filter {
$0.label1.lowercased().contains(searchText.lowercased()) == .orderedAscending
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3653 次 |
| 最近记录: |