它不断显示错误:无法转换类型(_)的值 - > 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;
}
答案 0 :(得分:1)
请勿使用NSArray
!
我猜你的OrdersArray
是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
})
答案 1 :(得分:0)
试试这样!来自This
的参考 import UIKit
class SearchViewController: UIViewController,UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate {
@IBOutlet weak var searchBar: UISearchBar!
@IBOutlet weak var SearchTableView: UITableView!
var searchActive : Bool = false
var data = ["San Francisco","New York","San Jose","Chicago","Los Angeles","Austin","Seattle"]
var filtered:[String] = []
override func viewDidLoad() {
super.viewDidLoad()
/* Setup delegates */
SearchTableView.delegate = self
SearchTableView.dataSource = self
searchBar.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
searchActive = true;
}
func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
searchActive = false;
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
searchActive = false;
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchActive = false;
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filtered = data.filter({ (text) -> Bool in
let tmp: NSString = text as NSString
let range = tmp.range(of: searchText, options: .caseInsensitive)
return range.location != NSNotFound
})
if(filtered.count == 0){
searchActive = false;
} else {
searchActive = true;
}
SearchTableView.reloadData()
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if(searchActive) {
return filtered.count
}
return data.count;
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")! as UITableViewCell;
if(searchActive){
cell.textLabel?.text = filtered[indexPath.row]
} else {
cell.textLabel?.text = data[indexPath.row];
}
return cell;
}
}