在一个字典

时间:2017-03-22 03:00:20

标签: filter swift3

我目前运行此代码:

searchterm = "test"
results = resultsArray.filter { $0.description.contains (searchterm!) }

我的问题是如何在company_nameplace或我的模型中的任何其他字段中进行搜索并将其添加到结果中。

我是否需要同时使用过滤器,然后将结果附加到模型的新变量实例中?

编辑:

如果“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,
    ]
}

2 个答案:

答案 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) }