使用swift 4

时间:2017-12-17 20:20:00

标签: ios firebase search swift4

我有一个简单的应用程序,允许人们发布帖子,现在我已经创建了一个搜索栏,以便人们可以搜索帖子,但我想让用户搜索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

1 个答案:

答案 0 :(得分: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()。希望这可以帮助。

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