Ios 搜索栏在swift 3中不起作用。无法将类型为()->Bool的值转换为预期的参数类型NSPredicate
它持续显示错误:无法将类型为->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
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
})