【问题标题】:swift how to make a search from firebase databaseswift如何从firebase数据库中进行搜索
【发布时间】:2017-06-26 04:52:34
【问题描述】:

我的应用中有一个 firebase 数据库,下面是它的屏幕截图: 我需要使用这个控制器过滤我的结果

所以我需要比较

`ref.observe(.value, with: {snapshot in
            if (snapshot.value is NSNull){
                print("not found")
            }else{
                for child in (snapshot.children) {
                    let snap = child as! DataSnapshot
                    let dict = snap.value as! AnyObject
                    let latt = dict["lat"]
                    let lngt = dict["lng"]
                    let sext = dict["sex"]
                    let statust = dict["status"]
                    let aget = dict["age"]


                    if self.searchSex.selectedSegmentIndex == 0{
                        self.sexG = "Male"}
                    else if self.searchSex.selectedSegmentIndex == 1{
                        self.sexG = "Female"
                    }


                    if (self.sexG == sext as! String && Int(searchAgeFrom.value) <= Int(aget) <= Int(searchAgeTo.value)))
                    {


                    }


                }


            }

        })
`

我不知道如何从 dataSnapshot 中过滤结果,我总是收到错误消息。在这里,我执行我的搜索,在 ???????我不知道如何从 pickerView 中搜索选定的值:

 if (self.sexG == sext as! String && Int(searchAgeFrom.value) <= Int(aget) <= Int(searchAgeTo.value)) && ?????)
                {


                }

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database


    【解决方案1】:

    我相信您在打开 snapshot 时有错误。

    试试这个:

    let dict = snap.value as! [String: AnyObject]
    let latt = dict["lat"] as! Double
    let lngt = dict["lng"] as! Double
    // etc..
    

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      首先,从searchAgeTo.value 开始,您的 if 条件不正确,您也没有与任何值进行比较,而不是将snap.value 转换为AnyObject,在您的情况下将其转换为正确的字典[String:Any]

      现在要获取pickerView 选定值,您可以使用实例方法selectedRow(inComponent:) 或也使用UIPickerViewDelegate 方法didSelectRow

      let selectedIndex = yourPickerView.selectedRow(inComponent: 0)
      let selectedValue = yourPikcerArray[selectedIndex]
      

      现在以这种方式在 if 条件下进行比较。

      for child in (snapshot.children) {
          let snap = child as! DataSnapshot
          let dict = snap.value as! [String:Any]
          let latt = dict["lat"]
          let lngt = dict["lng"]
          let sext = dict["sex"] as! String
          let statust = dict["status"] as! String
          let aget = dict["age"]
          if self.searchSex.selectedSegmentIndex == 0 {
              self.sexG = "Male"
          }
          else {
              self.sexG = "Female"
          }
          let selectedIndex = yourPickerView.selectedRow(inComponent: 0)
          let selectedValue = yourPikcerArray[selectedIndex]
          if (self.sexG == sext && Int(searchAgeFrom.value) >= Int(aget) && Int(aget) <= Int(searchAgeTo.value) && selectedValue == statust) {
               //Handle here
          }
      }
      

      但不是以这种方式过滤Firebase数据,更好的方法是您可以将所有数据存储在某个主数组中,而不是根据您的过滤器过滤该主数组,这样您就不需要每次都观察Firebase数据当您更改过滤器值时。还可以创建一个自定义类或结构来使用该自定义对象的数组来管理您的所有 Firebase 数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-08
        • 2021-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-01
        相关资源
        最近更新 更多