栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Swift的Firebase查询中应用多个过滤器?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Swift的Firebase查询中应用多个过滤器?

这个问题和评论有一些不同的标准,但让我从高层次解决。

第一个答案是:无法查询Firebase的一个孩子的值,然后再排序。

简单查询功能表示:

let query = ridesRef.queryOrdered(byChild: "cust_id").queryEqual(toValue: "cust id 4")

要完成该任务,请查询所需的子数据(在本例中为所有客户id 4个节点),然后按代码订购。这是一个例子

class RideClass {    var key = ""    var cust_id = ""    var pay_time = ""    init(key: String, cust_id: String, pay_time: String) {        self.key = key        self.cust_id = cust_id        self.pay_time = pay_time    }}var rideArray = [RideClass]()func populateRideArray() {    let usersRef = self.ref.child("ride_details")    let query = usersRef.queryOrdered(byChild: "cust_id").queryEqual(toValue: "cust id 4")     query.observeSingleEvent(of: .value, with: { snapshot in         for child in snapshot.children { let snap = child as! DataSnapshot let dict = snap.value as! [String: Any] let key = snap.key let custId = dict["cust_id"] as! String let payTime = dict["pay_time"] as! String let ride = RideClass(key: key, cust_id: custId, pay_time: payTime) self.rideArray.append(ride)        }        for ride in self.rideArray {  //unsorted example print(ride.pay_time)        }        self.rideArray.sort { $0.pay_time < $1.pay_time } //sort        for ride in self.rideArray {  //sorted example print(ride.pay_time)        }    })}

在此示例中,我们创建了一个RideClass,其中存储了有关游乐设施的一些信息,然后存储了可以用作tableView数据源的游乐设施数组。

然后查询所有客户ID为4的游乐设施。我们有一个循环显示未分类的取回内容,然后显示这个小宝石

self.rideArray.sort { $0.pay_time < $1.pay_time }

它将按pay_time对行驶数组进行排序,从而回答了问题。

但是,假设有100,000个乘车子节点。加载所有这些数据并按代码进行排序可能对内存方面提出挑战。你是做什么?

我们利用复合价值;连同cust_id和pay_time的子节点,我们还包括id_time。这是一个可能的结构:

  "ride_details" : {    "ride_0" : {      "cust_id" : "cust id 4",      "id_time" : "cust id 4_172200",      "pay_time" : "172200"    },    "ride_1" : {      "cust_id" : "cust id 2",      "id_time" : "cust id 2_165500",      "pay_time" : "165500"    },    "ride_2" : {      "cust_id" : "cust id 1",      "id_time" : "cust id 1_182300",      "pay_time" : "182300"    },    "ride_3" : {      "cust_id" : "cust id 3",      "id_time" : "cust id 3_131800",      "pay_time" : "131800"    },    "ride_4" : {      "cust_id" : "cust id 4",      "id_time" : "cust id 4_132200",      "pay_time" : "132200"    }  },

然后按正确的顺序读取cust id 4节点中的一些代码

    let ridesRef = self.ref.child("ride_details")    let query = ridesRef.queryOrdered(byChild: "id_time")  .queryStarting(atValue: "cust id 4_")  .queryEnding(atValue: "cust id 4_\uf8ff")    query.observeSingleEvent(of: .value, with: { snapshot in        for child in snapshot.children { let snap = child as! DataSnapshot let dict = snap.value as! [String: Any] let key = snap.key let custId = dict["cust_id"] as! String let payTime = dict["pay_time"] as! String let ride = RideClass(key: key, cust_id: custId, pay_time: payTime) self.rideArray.append(ride)        }        for ride in self.rideArray {  //unsorted example print(ride.pay_time)        }    })

有两件事要注意:

必须迭代快照以维护子序列

“ uf8ff”是Unipre中很高代码级别的字符-因为它包含所有前面的字符。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/469087.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号