Firebase에서이 목록의 순서를 어떻게 바꿀 수 있습니까? 마지막 항목을 첫 번째 항목으로 지정합니다. 나는 queryOrdered
을 사용하려고 시도했지만 차이는 없습니다.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"
},
코드 : 나는 중포 기지에서 검색하고있어 데이터 구조의 하나 개의 샘플을 나열 @Frank가 말한대로
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()
}
}
}
})
}
Firebase 데이터베이스에는 내림차순 값으로 주문할 연산자가 없습니다. 따라서 결과를 클라이언트 쪽 *으로 반대로하거나 반전 된 날짜가 들어있는 값을 추가해야합니다 (시간 소인으로 저장하면 쉽게 됨). 자세한 내용은 다음 결과 중 일부를 참조하십시오. http://stackoverflow.com/search?q=%5Bfirebase%5D%5Bswift%5D+descending –