2017-04-13 597 views
0

enter image description here斯威夫特

排序火力地堡实时数据库中的数据,我需要在一个表视图来显示这些数据,但他们已在混合顺序表视图。我怎样才能把它们放入与数据库中相同的顺序。请帮忙,我会深表谢意。

第一张图片显示我运行该项目后的iPhone屏幕,第二张图片是数据库。我希望他们在数据库中的确切顺序。

+0

不清楚您的数据在Firebase数据库中的排序方式 - 是按*键/ UID *还是按优先级*? –

+0

感谢您的回复,我已经添加了第二张图片更加清晰。 –

+0

@ muhcomen检查我的答案。如果您有其他问题 - 欢迎您 –

回答

1

我希望时期对象是这样的:

struct PeriodItem { 
    let key: String 

    let periodEnd: String 
    let periodName: String 
    let periodStart: String 

    let ref: FIRDatabaseReference? 

    init(periodEnd: String, periodName: String, periodStart: String, key: String = "") { 
     self.key = key 

     self.periodEnd = periodEnd 
     self.periodName = periodName 
     self.periodStart = periodStart 

     self.ref = nil 
    } 

    init(snapshot: FIRDataSnapshot) { 
     key = snapshot.key 

     let snapshotValue = snapshot.value as! [String: AnyObject] 
     periodEnd = snapshotValue["periodEnd"] as! String 
     periodName = snapshotValue["periodName"] as! String 
     periodStart = snapshotValue["periodStart"] as! String 

     ref = snapshot.ref 
    } 

    func toAnyObject() -> Any { 
     return [ 
      "periodEnd": periodEnd, 
      "periodName": periodName, 
      "periodStart": periodStart, 

      "key": key 
     ] 
    } 
} 

所以

当你填写你的Periods阵列充分,只需要使用排序:

// periods - array of objects from firebase database 
let yourTableViewPeriodsArray = periods.sorted(by: { $0.key < $1.key }) // maybe ">" instead of "<" 

然后:

DispatchQueue.main.async { 
    self.tableView.reloadData() 
} 

希望它可以帮助。

+0

当我在viewDidLoad中调用print([PeriodItem] .self)时,我得到Array 而不是实际的数组。有任何想法吗? –