Swift - 如何在 Firebase 上将排序查询创建为降序?

Posted

技术标签:

【中文标题】Swift - 如何在 Firebase 上将排序查询创建为降序?【英文标题】:Swift - How to create Sort query as Descending on Firebase? 【发布时间】:2016-03-30 16:18:13 【问题描述】:

我正在使用 Firebase 和 Alamofire,AlamofireImage 将我的 imageURL 数据缓存到内存并上传 ImageShack。

我坚持创建降序查询并尝试进行搜索,但找不到适合我的描述。这是我在 Firebase 上的测试 ref_post

childByAutoId()

-- 用户ID

-- 图像网址

-- 时间戳(我使用this 创建的)

*使用 NSDate().formattedISO8601 这是最好的方法还是你能建议我基本上处理它吗?

如何在 Firbase ios/Swift 中进行降序查询。这是我的 viewDidLoad

let query = DataService.ds.REF_POSTS.queryOrderedByChild("timestamp")

    query.observeEventType(.Value, withBlock:  snapshot in

        if let snapshots = snapshot.children.allObjects as? [FDataSnapshot] 
            self.posts = []
            for snap in snapshots 
                if let postDict = snap.value as? Dictionary<String, AnyObject> 

                    print(postDict)

                    let post = Post(imageUrl: postDict["imageUrl"]! as? String, username: DataService.ds.REF_USERS.authData.uid)

                    self.posts.append(post)
                
            

            self.tableView.reloadData()
        
    )

【问题讨论】:

【参考方案1】:

代替

self.posts.append(post)

使用

self.posts.insert(post, at: 0)

这会将项目添加到列表的开头,从而将您从 firebase 获得的升序反转为降序。

【讨论】:

【参考方案2】:
self.posts = self.posts.reverse()

为了保存NSDate 实例,我个人使用timeIntervalSinceReferenceDate(),它返回一个NSTimeInterval(即Double),然后您可以将其保存在Firebase 中。读取数据时,可以通过init(timeIntervalSinceReferenceDate:)获取原始的NSDate

【讨论】:

@Tim 我应该将 Firebase 中的时间戳值保存为 Double 还是 String?我只是想知道当使用ref.queryOrderedByChild("timestamp").observeEventType(.Value, withBlock: snapshot in 查询时,firebase 将如何对数据进行排序。如果时间戳(Double 类型)在 Firebase 中保存为字符串,那么快照元素在检索时将如何排序,按什么顺序? @bibscy 我相信我将时间戳存储为整数,但我不记得细节了。你或许应该试试看!

以上是关于Swift - 如何在 Firebase 上将排序查询创建为降序?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase + Swift TableView 按日期排序

Firebase Firestore:如何在 Android 上将文档对象转换为 POJO

Swift4 Firebase 数据库排序不起作用

Swift - 从 Firebase DB 中提取的数据中按最近位置排序

如何在 Swift 上将 HTML 代码加载到 WebView

如何在swift 3上将UITableViewController的背景颜色更改为渐变色