[英]swift how to make a search from firebase database
I have a firebase database in my app, here is a screenshot of it: 我的应用程序中有一个Firebase数据库,这是它的屏幕截图:
And I need to filter my results using this controller
我需要使用此控制器过滤结果
so I need to compare from 所以我需要从
`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)))
{
}
}
}
})
`
I don't know how to filter results from dataSnapshot, I always get an errors. 我不知道如何从dataSnapshot过滤结果,我总是会遇到错误。 Here, I perform my searching, in ?????
在这里,我以?????进行搜索。 I don't know how search for selected value from pickerView:
我不知道如何从pickerView搜索选定的值:
if (self.sexG == sext as! String && Int(searchAgeFrom.value) <= Int(aget) <= Int(searchAgeTo.value)) && ?????)
{
}
First of all your if condition is not correct as of with searchAgeTo.value
you are not comparing with any value also instead of casting snap.value
to AnyObject
cast it to proper dictionary in your case it is [String:Any]
. 首先,如果条件与
searchAgeTo.value
一样不正确, searchAgeTo.value
您也不会与任何值进行比较,而不是将snap.value
强制snap.value
为AnyObject
,如果是[String:Any]
, AnyObject
其强制snap.value
为适当的字典。
Now to get the pickerView
selected value you can use instance method selectedRow(inComponent:)
or also use UIPickerViewDelegate
method didSelectRow
. 现在,要获取
pickerView
选定的值,您可以使用实例方法selectedRow(inComponent:)
或也可以使用UIPickerViewDelegate
方法didSelectRow
。
let selectedIndex = yourPickerView.selectedRow(inComponent: 0)
let selectedValue = yourPikcerArray[selectedIndex]
Now compare this in if condition this way. 现在,以这种方式在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
}
}
But instead of filtering Firebase
data this way better way is you can store all the data in some main array and than filter that main array according to your filter so that you will not need to observe Firebase
data every time when you change your filter value. 但是,
Firebase
这种更好的方式过滤Firebase
数据,还不如将所有数据存储在某个主数组中,而不是根据过滤器对该主数组进行过滤,这样您就不必在每次更改过滤器值时都观察Firebase
数据。 Also make one custom class or struct to manage all your Firebase data with array of that custom object. 还可以创建一个自定义类或结构,以使用该自定义对象的数组管理所有Firebase数据。
I believe you have erors in unwrapping of snapshot
. 我相信您在解开
snapshot
会犯错误。
Try this: 尝试这个:
let dict = snap.value as! [String: AnyObject]
let latt = dict["lat"] as! Double
let lngt = dict["lng"] as! Double
// etc..
Hope it helps 希望能帮助到你
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.