用swift 4搜索多个键

问题描述 投票:0回答:1

我有一个简单的应用程序,允许人们发布帖子,现在我已经创建了一个搜索栏,以便人们可以搜索帖子,但我想让用户搜索帖子的title或帖子的location或者同时搜索帖子的标题和位置。我的搜索正在搜索我的firebase数据库,但我只能将其分配给搜索titlelocation。我有一点问题,所以它同时搜索两个键

我的过滤和搜索代码看起来像这样

 func filterContent(searchText:String) {
    self.filteredUsers = self.userArray.filter{user in

    //  let title = user!["title"] as? String
        let adress = user!["adress"] as? String

    // return(title?.lowercased().contains(searchText.lowercased()))!
        return(adress?.lowercased().contains(searchText.lowercased()))!


    }

    tableView.reloadData()

}

显然你可以看到我只能返回其中一个搜索你知道我可以返回这两个吗?

我也尝试过这个

 func filterContent(searchText:String) {
    self.filteredUsers = self.userArray.filter{user in

      let title = user!["title"] as? String
      let adress = user!["adress"] as? String


     return(adress?.lowercased().contains(searchText.lowercased()))! &&  (title?.lowercased().contains(searchText.lowercased()))!


    }

    tableView.reloadData()

}

但是代码只允许搜索功能起作用,例如标题和地址都被命名为“apple”然后它会起作用但是如果title被命名为“apple”而adress被命名为“orange”而我会搜索“apple” “或”橙色“没有任何东西会出现,因为&&作为一个bool工作,并且只有在titlelocation的关键字是相同的情况下才有效。因此,我仍然在方方面面,并想知道我怎么可能得到搜索过滤器来搜索titleaddress

ios firebase search swift4
1个回答
1
投票
func filterContent(searchText:String) {
 self.filteredUsers = self.userArray.flatMap { (temp) -> User in
   return temp
   }.filter { (aUser) -> Bool in
     return aUser.address?.localizedCaseInsensitiveContains(searchText) == true || aUser.title?.localizedCaseInsensitiveContains(searchText) == true
  }
  tableView.reloadData()
}

或者,在下面稍微靠近..

func filterContent(searchText:String) {
  self.filteredUsers = self.userArray.filter{ user in
    let title = user!["title"] as? String
    let address = user!["adress"] as? String
    return title.localizedCaseInsensitiveContains(searchText) == true || address.localizedCaseInsensitiveContains(searchText) == true
  }
  tableView.reloadData()
}

我认为最重要的是你需要flatmap来删除nil用户,然后我直接在字符串顶部使用localizedCaseInsensitiveContains()。希望这可以帮助。

我将用户声明为游乐场内的结构,以确保其运行良好。快速执行此操作的最佳方法可能是创建领域用户,然后使用谓词过滤结果。 (性能)

© www.soinside.com 2019 - 2024. All rights reserved.