如何从Firebase逆转项目的顺序 [英] How to reverse order of items from Firebase

查看:118
本文介绍了如何从Firebase逆转项目的顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何从Firebase中反转此列表的顺序?我想要最后一个项目是第一个。我试图使用 queryOrdered ,但是没有什么区别。我列出了一个从Firebase检索的数据结构示例:

  -  KhPRPQEOiVzPW7G2iQI:{
amount:20,
coordinate:{
lat:28.10388759332169,
long:-81.46038228976457
},
creationTime :2017-04-11 00:37:29 +0000,
creator:6MAK7nkzoBT6NzIxj7DW3564cf72,
description:搭便车,
distanceRadius:1609.34 ,
expireTime:2017-04-11 03:37:00 +0000,
paymentNonce:51df2b01-9e97-0fce-14d5-fc8fdf98603c,
provider :PSEFUZdAAxRH14oYnyzE7yMpcil1,
status:accepted
},

Code:

  func retrieveRquestFromFir(){
var searchType:String!
switch self.messageType {
case messageTypeEnum.creator:
searchType =creator
break
case messageEnum.provider:
searchType =provider
break

// TODO:在这里修复
let path =rquest / frontEnd / posts / userCreatedPost
self.childRef(path).queryOrdered(byChild :creationTime).observe(.childAdded,with:{snapshot in
如果让snapDict = snapshot.value as?NSDictionary {
如果让postId = snapDict [searchType] as?String {
if postId == self.currentUserId()!{
let rquestId = snapshot.key
let status = snapDict [status] as!String
//检查消息是否为等待或接受,以显示消息
如果状态==挂起||状态==接受{
让description = snapDict [description] as!字符串
让amount = snapDict [amount] as!字符串
让creator = snapDict [creator]为!字符串
var provider:String?
//计算到期时间
var expireTime:String!
让dateString = snapDict [expireTime] as!字符串
var date:Date!
if status ==pending{

date = Date(string:dateString,format:yyyy-MM-dd HH:mm:ss Z)!
如果日期< Date(){
return
}
} else if status ==accepted{
expireTime = snapDict [expireTime] as! String
date = Date(string:dateString,format:yyyy-MM-dd HH:mm:ss Z)!
}
如果让providerUser = snapDict [provider] as?字符串{
provider = providerUser
}
let array = [
expireTime:dateString,
amount:amount,
description:描述
rquestId:rquestId,
status:status,
provider:provider as Any,
creator:creator
] as NSDictionary
//检查日期是否超过5天,如果超过dont添加
let dateAmount = Date.daysBetween(start:date,end:Date())
// let StringDate = newDate?.string(withFormat:yyyy-MM-dd HH:mm:ss Z)

if dateAmount< = 5 {
DispatchQueue.main.async {
self.RquestInfoArray.append(array)

self.tableView.reloadData()
}
}
}

$ else {
DispatchQueue.main.async {
self.RquestInfoArray.append(array)
self.tableView.reloadData()
}




$ b $ div class =h2_lin>解决方法

正如@Frank所说,你需要排序你的结果客户端。

你可以用这样的排序数组 p>

  let sorted = self.RquestInfoArray.sorted(by:{(r1:RequestInfoType,r2:RequestInfoType) - > 
中的Bool返回r1.dateAmount> r2.dateAmount
))

但是如果你真的想要反转这个数组,简单一点就是在开始时添加你的新元素而不是结束。

$ p $ self $ R $ 0)


How can I reverse the order of this list in from Firebase? I want the last item to be the first. I tried to use queryOrdered, but that did not make a difference. I listed one sample of the data structure that I'm retrieving from Firebase:

"-KhPRPQEOiVzPW7G2iQI" : {
            "amount" : "20",
            "coordinate" : {
              "lat" : 28.10388759332169,
              "long" : -81.46038228976457
            },
            "creationTime" : "2017-04-11 00:37:29 +0000",
            "creator" : "6MAK7nkzoBT6NzIxj7DW3564cf72",
            "description" : "A ride ",
            "distanceRadius" : 1609.34,
            "expireTime" : "2017-04-11 03:37:00 +0000",
            "paymentNonce" : "51df2b01-9e97-0fce-14d5-fc8fdf98603c",
            "provider" : "PSEFUZdAAxRH14oYnyzE7yMpcil1",
            "status" : "accepted"
          },

Code:

func retrieveRquestFromFir(){
        var searchType:String!
        switch self.messageType {
        case messageTypeEnum.creator:
            searchType = "creator"
            break
        case messageTypeEnum.provider:
            searchType = "provider"
            break
        }
        //TODO: Fix here
        let path = "rquest/frontEnd/posts/userCreatedPost"
        self.childRef(path).queryOrdered(byChild: "creationTime") .observe(.childAdded, with: {snapshot in
            if let snapDict = snapshot.value as? NSDictionary {
                if let postId = snapDict[searchType] as? String {
                    if  postId == self.currentUserId()! {
                        let rquestId = snapshot.key
                        let status = snapDict["status"] as! String
                        //check to see if message is pending or accepted in order to show messages
                        if status == "pending" || status == "accepted" {
                            let description = snapDict["description"] as! String
                            let amount = snapDict["amount"] as! String
                            let creator = snapDict["creator"] as! String
                            var provider:String?
                            // calculate expire time here
                            var expireTime:String!
                            let dateString = snapDict["expireTime"] as! String
                            var date:Date!
                            if status == "pending" {

                                 date = Date(string: dateString, format: "yyyy-MM-dd HH:mm:ss Z")!
                                if date < Date() {
                                    return
                                }
                            }else if status == "accepted" {
                                expireTime = snapDict["expireTime"] as! String
                                date = Date(string: dateString, format: "yyyy-MM-dd HH:mm:ss Z")!
                            }
                            if let providerUser = snapDict["provider"] as? String {
                                provider = providerUser
                            }
                            let array = [
                                "expireTime":dateString,
                                "amount":amount,
                                "description":description,
                                "rquestId":rquestId,
                                "status": status,
                                "provider":provider as Any,
                                "creator": creator
                                ] as NSDictionary
                            //check if date is more than 5 days if it is more than dont Added
                            let dateAmount = Date.daysBetween(start: date, end: Date())
                            // let StringDate = newDate?.string(withFormat: "yyyy-MM-dd HH:mm:ss Z")

                            if dateAmount <= 5 {
                                DispatchQueue.main.async {
                                    self.RquestInfoArray.append(array)

                                    self.tableView.reloadData()
                                }
                            }
                        }
                    }
                }else {
                    DispatchQueue.main.async {
                       self.RquestInfoArray.append(array)
                        self.tableView.reloadData()
                    }
                }
            }
        })
    }

解决方案

As @Frank says, you need to sort your results client-side.

You can either sort the array with something like this

let sorted = self.RquestInfoArray.sorted(by: { (r1: RequestInfoType, r2: RequestInfoType) -> Bool in
            return r1.dateAmount > r2.dateAmount
})

but if you really just want to reverse the array, probably simpler just to add your new elements at the start instead of the end

self.RquestInfoArray.insert(contentsOf: array, at: 0)

这篇关于如何从Firebase逆转项目的顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆