无法将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实际上是关于sorting的。如果你想通过一些查询来过滤你的数据,那么情况无关紧要,我建议你在data.label1searchText:上都做.lowercased()

let filtered = data.filter {
$0.label1.lowercased().contains(searchText.lowercased()) == .orderedAscending 
}

相关内容

最新更新