2016-12-31 28 views
0

如何在視圖中顯示的以下數據:如何在火力數據顯示嵌套對象

[ 
    "parties" { 
    "2016-12-30" { 
     "uid" { 
     "name": "joe", 
     "age": "32" 
     }, 
     "uid" { 
     "name": "kevin", 
     "age": "29" 
     } 
    }, 
    "2016-12-25" { 
     "uid" { 
     "name": "ben" 
     "age": "44" 
     } 
    } 
    } 
] 

以我控制器I有

var parties = [Party]() 

DataService.ds.REF_PARTIES.observe(.value, with: { (snapshot) in 

    if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot] { 
     print(snapshot) 
     for snap in snapshot { 
      if let partyDict = snap.value as? [String: AnyObject] { 
       let key = snap.key // the party date 
       let party = Party(date: key, partyData: partyDict) 
       self.parties.append(party) 

      } 
     } 
    } 
    self.tableView.reloadData() 
}) 

類PartyFeedCell:的UITableViewCell:

func configureCell(party: Party) { 
dateLabel.text = part.date // date as expected 
} 

在反應中,我可以使用Object.key來在循環中進行更深入的操作並獲取這些日期(鍵)的用戶。任何方式來完成這個?在xxx的日期下,我應該看到一個用戶列表。

Party.swift:

import Foundation 

class Party { 
    private var _name: String! 
    private var _age: String! 

    var name: String { 
    return _name 
    } 

    [...] 

    init(name: String, age: String) { 
    self._name = name 
    self._age = age 
    } 

    init(date: String, partyData: [String: AnyObject]) { 
    self._date = date 
    [...] 
    } 
} 

DataService.swift:

import Foundation 
import FirebaseDatabase 

let DB_BASE = FIRDatabase.database().reference() 

class DataService { 

    static let ds = DataService() 
    private var _REF_BASE = DB_BASE 
    private var _REF_PARTIES = DB_BASE.child("parties").queryOrderedByKey() 

    var REF_BASE: FIRDatabaseReference { 
    return _REF_BASE 
    } 

    var REF_PARTIES: FIRDatabaseQuery { 
    return _REF_PARTIES 
    } 


} 
+0

您的問題按*日期分組,*但您的Firebase結構不包括日期。也許你的意思是*年齡*?它也看起來像在party節點下有重複的鍵* uniqueDates *,這是不可能發生的。 – Jay

+0

@Jay嗨。是的,日期將是獨一無二的。真正想要的是如何顯示這些信息。 – Sylar

+0

我想你錯過了我的觀點。您無法按日期排序,排序或搜索,因爲您的Firebase結構中沒有日期。請修正您的問題或結構以包含日期。此外,這個問題不再是一個問題,所以你不清楚你在問什麼,請更新。 – Jay

回答

1

兩件事情:

使用日期爲重點的...雖然它可能是好的,應該可能改變 - 最好的做法是從包含在兒童中的數據中取消關鍵字。

parties 
    -Y9809s0asas 
    date: "2016-12-30" 
    users: 
     uid_0: true 
     uid_1: true 
    -Y89js99skks 
    date: "2016-12-15" 
    users: 
     uid_1: true 
     uid_3: true 

users 
    uid_0: 
    name: "ben" 
    age: "42" 
    uid_1: 
    name: "frank" 
    age: "28" 
    etc 

政黨內部密鑰由childByAutoId(Y9809s0asas等)產生

第二件事是,代碼看起來非常確定。這個問題似乎是如何從字典得到一個值?

在這種情況下,代碼將snap.value指定爲[String:AnyObject]的字典給partyDict。所以在這一點上partyDict只是密鑰的字典:值對

所以在您的黨類只是一個簡單的任務是所有需要做的事情:

init(date: String, partyData: [String: AnyObject]) { 
    self._date = date 
    self._age = partyData["age"] 
    self._name = partyData["name"] 
    } 

我沒有運行的代碼,但它非常接近可用。

噢 - 在這種結構變化下,您將需要爲Party類增加一個屬性。確保你將父節點名稱(snap.key)傳遞到類中,以便如果需要更新等,它將存儲父節點名稱(從上述結構中的Y9809s0asas)

+0

謝謝。讓我回到你身邊。 – Sylar