在Nsarray中,我需要过滤包含searchKey的所有元素(例如39013)。现在,它返回了错误的值。我的搜索功能出了什么问题?我认为问题出在FORMAT行,但无法弄清楚要做什么?
要求:搜索栏必须搜索在LocationModel对象中声明的DesenNo中的值。
这是对象
import UIKit
class LocationModel: NSObject {
//properties
var DesenNo: String?
var Dolar: String?
var Zemin: String?
var En: String?
var Euro: String?
var Renk: String?
}
这是我的搜索功能:
func updateSearchResults(for searchController: UISearchController) {
if searchController.isActive {
filteredData.removeAll(keepingCapacity: false)
let searchPredicate = NSPredicate(format: "LocationModel.DesenNo CONTAINS[c] %@", searchController.searchBar.text!)
let array = self.feedItems.filter { searchPredicate.evaluate(with: ($0 as! LocationModel).DesenNo) }
let filterArray = array.map {($0 as! LocationModel).DesenNo}
filteredData = filterArray as! [String]
listTableView.reloadData()
} else {
filteredData.removeAll(keepingCapacity: false)
listTableView.reloadData()
}
}
答案 0 :(得分:0)
你不需要谓词。只需使用一个简单的Swift数组过滤器:
假设document.getElementById("car_count").innerHTML = count ;
被声明为self.feedItems
,您只需要:
[LocationModel]
如果您希望将这些结果简化为相应的let matchingModels = self.feedItems.filter { $0.DesenNo?.contains(searchController.searchBar.text!) }
值列表,请执行:
DesenNo
作为旁注,您的filteredData = matchingModels.map { $0.DesenNo }
课程无需延长LocationModel
。它也应该是NSObject
,而不是struct
。
另请注意,标准做法是变量和方法名称以小写字母开头。类和结构名称以大写字母开头。
class
如果您出于某种原因确实想使用func updateSearchResults(for searchController: UISearchController) {
if searchController.isActive {
let matchingModels = self.feedItems.filter { $0.DesenNo?.contains(searchController.searchBar.text!) }
filteredData = matchingModels.map { $0.DesenNo }
listTableView.reloadData()
} else {
filteredData.removeAll(keepingCapacity: false)
listTableView.reloadData()
}
}
,可以将代码更新为:
NSPredicate
如果func updateSearchResults(for searchController: UISearchController) {
if searchController.isActive {
let searchPredicate = NSPredicate(format: "DesenNo CONTAINS[c] %@", searchController.searchBar.text!)
let array = self.feedItems.filter { searchPredicate.evaluate(with: $0) }
filteredData = array.map { $0.DesenNo }
listTableView.reloadData()
} else {
filteredData.removeAll(keepingCapacity: false)
listTableView.reloadData()
}
}
实际上是self.feedItems
而不是正确的Swift数组,请更改:
NSArray
为:
... = self.feedItems.filter { ...