在tableView上搜索多个对象

时间:2018-07-25 08:19:56

标签: swift uitableview

我将 searchBar 放在 tableView 内,然后将JSON解析为tableView,搜索工作正常,但是我想搜索多个对象。此代码适用于最新过滤的RequestBody。我要搜索requestTitle and RequestBody

如何解决此问题? `

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

    if searchBar.text == nil ||  searchBar.text == "" {

        inSearchMode = false
        tableView.reloadData()
        view.endEditing(true)
    } else {

        inSearchMode = true
        _ = searchBar.text!.lowercased()
        filteredRequest = pdvRequest.filter({ (pdv: PdvRequest) -> Bool in
            return pdv.pdvRequestTitle.lowercased().contains(searchText.lowercased())
        })
        filteredRequest = pdvRequest.filter({ (pdv: PdvRequest) -> Bool in
            return pdv.pdvRequestBody.lowercased().contains(searchText.lowercased())

        })
        self.tableView.reloadData()
        }
    }//END
`

2 个答案:

答案 0 :(得分:1)

您可以尝试使用||在其中任何一个中搜索文本,或者使用&&在二者中搜索内容

filteredRequest = pdvRequest.filter({ (pdv: PdvRequest) -> Bool in
    return pdv.pdvRequestTitle.lowercased().contains(searchText.lowercased()) && pdv.pdvRequestBody.lowercased().contains(searchText.lowercased())
})

答案 1 :(得分:1)

由于您的搜索政策完全不清楚,因此这里有两个选择。

如果搜索词在正文中的标题 AND 中必须同时两者,则应如下所示:

let lowercaseTerm = searchText.lowercased()
filteredRequest = pdvRequest.filter({ (pdv: PdvRequest) -> Bool in
        return pdv.pdvRequestTitle.lowercased().contains(lowercaseTerm) && pdv.pdvRequestBody.lowercased().contains(lowercaseTerm)
    })

如果搜索词应在正文中的标题 OR 中为 之一,则将是解决方案:

let lowercaseTerm = searchText.lowercased()
filteredRequest = pdvRequest.filter({ (pdv: PdvRequest) -> Bool in
    return pdv.pdvRequestTitle.lowercased().contains(lowercaseTerm) || pdv.pdvRequestBody.lowercased().contains(lowercaseTerm)
})