当我将以下Firebase数据库数据加载到我的tableView中时,数据是按日期升序排序的。我如何按降序排序(最新的帖子显示在顶部)?
在Xcode中查询:
let ref = self.rootRef.child("posts").queryOrderedByChild("date").observeEventType(.ChildAdded, withBlock: { (snapshot) -> Void in
JSON导出:
"posts" : {
"-KMFYKt7rmfZINetx1hF" : {
"date" : "07/09/16 12:46 PM",
"postedBy" : "sJUCytVIWmX7CgmrypqNai8vGBg2",
"status" : "test"
},
"-KMFYZeJmgvmnqZ4OhT_" : {
"date" : "07/09/16 12:47 PM",
"postedBy" : "sJUCytVIWmX7CgmrypqNai8vGBg2",
"status" : "test"
},
谢谢你!
编辑:下面的代码是整个解决方案,感谢Bawpotter
更新的查询:
let ref = self.rootRef.child("posts").queryOrderedByChild("date").observeEventType(.ChildAdded, withBlock: { (snapshot) -> Void in
let post = Post.init(key: snapshot.key, date: snapshot.value!["date"] as! String, postedBy: snapshot.value!["postedBy"] as! String, status: snapshot.value!["status"] as! String)
self.posts.append(post)
self.tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: self.posts.count-1, inSection: 0)], withRowAnimation: .Automatic)
索引路径上行的表视图单元格
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("PostCell", forIndexPath: indexPath) as! PostCell
self.posts.sortInPlace({$0.date > $1.date})
self.tableView.reloadData()
邮政编码:swift:
import UIKit
class Post {
var key: String
var date: String
var postedBy: String
var status: String
init(key: String, date: String, postedBy: String, status: String){
self.key = key
self.date = date
self.postedBy = postedBy
self.status = status
}
}
4条答案
按热度按时间7ivaypg91#
当Firebase将数据加载到tableView数据源数组中时,调用以下命令:
yourDataArray.sortInPlace({$0.date > $1.date})
Swift 3版本:
Swift 4版本:
htzpubme2#
虽然我确实建议做什么是张贴和创建一个类,并这样做,我会给予你另一种方法来做排序。
由于您已经从Firebase按升序排序了它,并且您知道记录的数量,因此您可以执行以下操作:
ltskdhd13#
在使用数据前只需使用
.reverse()
示例:
cotxawn74#
**Swift 5:**在按所需字段排序后,向对象添加reversed()。例如,假设FireStore的“day”字段中有一个月中的某一天。类似这样的操作就可以实现(在viewDidLoad中调用loadData()函数来查看输出):