这是我的代码:
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”的值转换为结束结果 输入“布尔”
答案 0 :(得分:4)
请注意,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
的。如果您想通过某些查询过滤数据,而大小写无关紧要,建议您对.lowercased()
和data.label1
都使用searchText
:
let filtered = data.filter {
$0.label1.lowercased().contains(searchText.lowercased()) == .orderedAscending
}