我目前运行此代码:
searchterm = "test"
results = resultsArray.filter { $0.description.contains (searchterm!) }
我的问题是如何在company_name
或place
或我的模型中的任何其他字段中进行搜索并将其添加到结果中。
我是否需要同时使用过滤器,然后将结果附加到模型的新变量实例中?
编辑:
如果“test”在company_name,place和description中。我希望返回所有三个结果。但是,如果“测试”只是到位,我只需要返回。
EDIT2:
这是我的模型返回的一个例子。这是字典还是数组?对不起,我不知道百分之百的差异。我知道'“这个”:是'字典看起来像什么,但是因为它们周围有[]括号,我认为这使它成为一个数组......
struct GraphData {
var description: String
var company_name: String
var places: String
init(description: String, company_name: String, places: String){
self.description = description
self.company_name = company_name
self.places = places
}
func toAnyObject() -> Any {
print("return")
return [
"description": description,
"company_name": company_name,
"places": places,
]
}
答案 0 :(得分:3)
最简单的方法是在模型中创建自定义contains
方法,您可以使用该方法将搜索字词与模型中的任何属性进行匹配:
class YourModel {
var company_name: String
var description: String
var place: String
// ...
func contains(_ searchTerm: String) -> Bool {
return self.company_name.contains(searchTerm)
|| self.description.contains(searchTerm)
|| self.place.contains(searchTerm)
}
}
然后您可以使用自定义方法进行过滤:
let searchTerm = "test"
let results = resultsArray.filter { $0.contains(searchTerm) }
答案 1 :(得分:0)
resultsArray 是词典还是数组?
你可以做这样的事情
let searchTerm = "test"
let filter = resultsArray.filter{ $0.company_name!.contains(searchTerm) || $0.place!.contains(searchTerm) }
修改
class TestClass: NSObject {
var place: String?
var company_name: String?
func contain(searchTerm: String) -> [String] {
var result = [String]()
if let placeVal = place, placeVal.contains(searchTerm) {
result.append(placeVal)
}
if let companyVal = company_name, companyVal.contains(searchTerm) {
result.append(companyVal)
}
return result
}
}
let searchTerm = "test"
let filter = resultsArray.map { $0.contain(searchTerm: searchTerm) }