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
Swift - 从 Firebase DB 中提取的数据中按最近位置排序