无法将CompareResult转换为闭包结果类型Bool

时间:2018-07-19 12:31:41

标签: ios swift

这是我的代码:

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”的值转换为结束结果   输入“布尔”

1 个答案:

答案 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 
}