如何从firebase数据库进行搜索

时间:2017-06-26 04:52:34

标签: ios swift firebase firebase-realtime-database

我的应用中有一个firebase数据库,以下是它的截图: enter image description here 我需要使用此控制器过滤我的结果

controller

所以我需要从

进行比较
`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)) && ?????)
                {


                }

2 个答案:

答案 0 :(得分:1)

首先你的if条件不正确searchAgeTo.value你没有与任何值进行比较而不是将snap.value强制转换为AnyObject将其转换为适合您字典的字典它是[String:Any]

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

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

现在以这种方式比较这个。

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数据,而是更好的方法是将所有数据存储在某个主数组中,然后根据过滤器过滤主数组,这样就不需要观察{{1}每次更改过滤器值时都会生成数据。还可以创建一个自定义类或结构来管理具有该自定义对象数组的所有Firebase数据。

答案 1 :(得分:1)

我相信你在展开snapshot时会出现错误。

试试这个:

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

希望有所帮助