Ios 搜索栏在swift 3中不起作用。无法将类型为()->Bool的值转换为预期的参数类型NSPredicate

Ios 搜索栏在swift 3中不起作用。无法将类型为()->Bool的值转换为预期的参数类型NSPredicate,ios,swift3,xcode8,searchbar,Ios,Swift3,Xcode8,Searchbar,它持续显示错误:无法将类型为->Bool的值转换为预期的参数类型NSPredicate 在线: filtered = OrdersArray.filter(using: { (text) -> Bool in let tmp: NSString = text let range = tmp.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSear

它持续显示错误:无法将类型为->Bool的值转换为预期的参数类型NSPredicate 在线:

filtered = OrdersArray.filter(using: { (text) -> Bool in
            let tmp: NSString = text
            let range = tmp.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch)

    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

        filtered = OrdersArray.filter(using: { (text) -> Bool in
            let tmp: NSString = text
            let range = tmp.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch)
            return range.location != NSNotFound
        })

        if(filtered.count == 0){
            searchActive = false;
        } else {
            searchActive = true;
        }
        self.tableView.reloadData()
    }
标记了UISearchBarDelegate和UISearchDisplayDelegate代理 searchBarTextDidBeginEditing,searchBarTextDidEndEditing,searchBarCancelButtonClicked,searchBarSearchButtonClicked 函数是编写的 请告诉我在NSMutableArray中搜索数据还需要做什么

这是我的阵列

{
orders =     (
            {
        "created_at" = "2017-05-01 04:49:17";
        id = 591;
        "order_status" = CONFIRMED;
        "pickup_code" = 4356219;
        store =             {
            address1 = "**********";
            city = "**********";
            description = "*************";
            logo = "fghdshdx.png";
            name = "*******";
            "postal_code" = 110006;
            storeTotal = "20.00";
            "store_id" = 4;
            "tin_number" = M1O2R3E4MORE;
        };
        total = "20.00";
        "updated_at" = "2017-05-01 04:49:20";
        "user_address_id" = "<null>";
        "user_id" = 5372;
        "user_name" = "Amit Sinha";
    }
);
status = 1;

}

像这样试试!参考自

只是不要使用NSArray

我猜你的订单是NSArray或NSMutableArray。您应该首先将其转换为swift数组:

let swiftArray = Array(OrdersArray).map {  $0 as! NSString }
然后过滤swift数组:

filtered = swiftArray.filter(using: { (text) -> Bool in
    let range = tmp.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch)
    return range.location != NSNotFound
})

我看过这个代码:它属于achrak,我只是从那里复制的,它不是working@RajatAttri我用Swift3nSumTableArray=OrderArray更新代码,过滤后的代码与urs相同!仍然不工作你能告诉我你是如何声明和初始化数组的吗?过滤数组的类型是什么?OrdersArray是否包含字符串作为对象?@NiravD var OrdersArray=NSMutableArray,var filtered:[String]=[]@rajattri像这样你必须执行var OrdersArray=[String]和var filtered:[String]=[]在view Dod load中,您可以分配OrdersArray=[旧金山、纽约、圣何塞、芝加哥、洛杉矶、奥斯汀、西雅图]@Rajattri Sweeper是发布的解决方案。@Rajattri尝试以下操作:让namePredicate=NSPredicateformat:yourkey%@,搜索文本;//将您的密钥替换为您的密钥let filtered=self.arrQuestions as NSArray.filteredusing:NamePredicate不能将“\uu NSDictionaryM”0x1a7a25c50类型的值强制转换为“NSString”0x1a7a35ae8。2017-05-01 10:31:03.423309+0530 UniShop商户[3029:1014358]无法将类型为“\uu NSDictionaryM”0x1a7a25c50的值强制转换为“NSString”0x1a7a35ae8。
filtered = swiftArray.filter(using: { (text) -> Bool in
    let range = tmp.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch)
    return range.location != NSNotFound
})