我的应用中有一个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)) && ?????)
{
}
答案 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..
希望有所帮助