ios - 无法将 ComparisonResult 转换为闭包结果类型 Bool
问题描述
这是我的代码:
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()
}
我从 sql 查询结果添加到列表中,它们看起来很好,但是当我尝试实现搜索功能时,我无法构建它并出现错误:
无法将“ComparisonResult”类型的值转换为闭包结果类型“Bool”
解决方案
请注意,filter(_:)
接受闭包,应该返回Bool
值:
func filter(_ isIncluded: (Element) throws -> Bool) rethrows -> [Element]
据此,尝试查看 的结果localizedCaseInsensitiveCompare
。它返回ComparisonResult
,而不是Bool
。因此,您应该将其与某种ComparisonResult
类型(即.orderedAscending.
,.orderedSame
或.orderedDescending
)进行比较。
例子:
let filtered = data.filter {
$0.label1.localizedCaseInsensitiveCompare(searchText) == .orderedAscending
}
UPD。
localizedCaseInsensitiveCompare
真的是关于sort
ing。如果您想通过某些查询过滤数据并且大小写无关紧要,我建议您.lowercased()
同时使用data.label1
and searchText
:
let filtered = data.filter {
$0.label1.lowercased().contains(searchText.lowercased()) == .orderedAscending
}
推荐阅读
- javascript - 在 useEffect 中反应 setState 第一次调用不会起作用
- entity-framework - EF 核心请求中的线程
- python - 在 HTML 中显示不断变化的 Python 变量
- bison - 在 Windows 上运行野牛时出错“冲突:1 shift/reduce,1 reduce/reduce C:\GnuWin32\bin\bison.exe: m4: Invalid argument”
- php - 计算PHP laravel中数字的百分比
- c++ - 线程 - 如何访问 lambda 函数内的成员变量?
- python - 使用 Python 提取嵌套在任意级别的键/值对
- flutter - 如何在小部件底部显示 TabBar
- javascript - 通过 URL 访问 iframe 内函数的最佳解决方案
- python - Python 3.7.7 嵌入 - 致命 Python 错误:initfsencoding:无法加载文件系统编解码器