【问题标题】:Search Controller for words在控制器中搜索单词
【发布时间】:2017-12-29 09:27:44
【问题描述】:

我在我的应用程序中遵循了以下搜索功能示例代码 https://www.raywenderlich.com/157864/uisearchcontroller-tutorial-getting-started

一切正常,搜索也正常。但是当我以不同的顺序/顺序输入单词时,它不会给我结果。下面是我想要的例子

var String = "High, Fever"
var String = "fever"

现在,当我像“发烧”这样搜索时,它会给我两者的回应,但是当我搜索像“发烧 h”这样的东西时,它不会给我字符串..在我的情况下,他们只是输入单词而不管它们的顺序..

下面是我的代码

func filterContentForSearchText(_ searchText: String, scope: String = "Present") {
        filteredsymptoms = symptoms.filter({( symptoms : Symptoms) -> Bool in
            let doesCategoryMatch = (scope == "Present") || (scope == "Absent") || (scope == "Focus")

            if searchBarIsEmpty() {
                return doesCategoryMatch
            } else {
                return doesCategoryMatch && symptoms.name.lowercased().contains(searchText.lowercased())
            }
        })
        print(filteredsymptoms)
        self.tblListOfSymptoms.reloadData()
    }

【问题讨论】:

    标签: ios iphone swift uisearchcontroller


    【解决方案1】:
    symptoms.name.lowercased().contains(searchText.lowercased()
    

    这部分代码将检查“symptoms.name”是否包含整个搜索文本,在您的情况下为“fever h”。 如果你想搜索由空格分隔的所有文本部分,你应该使用这样的东西:

    func filterContentForSearchText(_ searchText: String, scope: String = "Present") {
        filteredsymptoms = symptoms.filter({( symptoms : Symptoms) -> Bool in
            let doesCategoryMatch = (scope == "Present") || (scope == "Absent") || (scope == "Focus")
    
            if searchBarIsEmpty() {
                return doesCategoryMatch
            } else {
                var result:Bool = false
                let searchTerms = searchText.lowercased().components(separatedBy: CharacterSet.whitespacesAndNewlines)
                for searchTerm in searchTerms
                {
                    result = doesCategoryMatch && symptoms.name.lowercased().contains(searchTerm)
                    if result == true
                    {
                        break
                    }
                }
                return result
            }
        })
        print(filteredsymptoms)
        self.tblListOfSymptoms.reloadData()
    }
    

    【讨论】:

      【解决方案2】:

      我想这取决于你想要达到的结果。如果您希望用户输入多个单词并搜索其中任何一个,请使用以下代码:

      searchText.lowercased().components(separatedBy: " ").map({ symptoms.name.lowercased().contains($0) }).reduce(false, { $0 || $1 })
      

      【讨论】:

        猜你喜欢
        • 2014-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-17
        • 1970-01-01
        • 1970-01-01
        • 2011-04-30
        相关资源
        最近更新 更多