2016-05-30 138 views
1

目前我的數據是這樣的Firebase中的快照。如何深入挖掘快照

{ 
    'listone': 
     { 
     'entrydate1': 
      { 
      'random key 1': 
       { 
       'name': 'Chris'; 
       'date': '24 May 2016' 
       } 
      'random key 2': 
       { 
       'name': 'John'; 
       'date': '25 May 2016' 
       } 
      } 
     'entrydate2': 
      { 
      'random key 1': 
       { 
       'name': 'Chris'; 
       'date': '24 May 2016' 
       } 
      'random key 2': 
       { 
       'name': 'John'; 
       'date': '25 May 2016' 
       } 
      } 
     } 
} 

隨機密鑰是由火力childByAutoID()

產生的問題是,當我把我的快照,我怎麼弄的細節每個隨機密鑰?基本上我需要檢索listone的數據,我將通過排序最早的entrydate來填充我的tableview。然而,在獲得快照之後,我失去了如何從快照中獲取信息的問題。

 override func viewDidLoad() { 
    super.viewDidLoad() 
    ref = FIRDatabase.database().reference() 
    let uid = FIRAuth.auth()!.currentUser!.uid 

    let listOneRef = ref.child(uid + "/listone") 

    _ = listOneRef.observeEventType(.Value, withBlock: { (snapshot) in 


     for item in snapshot.children { 
      let child = item.children.allObjects 

      for snap in child { 
       //anyitems was initialized as [AnyObject] array 
       self.anyitems.append(snap) 

      } 
     } 
    self.tableView.reloadData() 
    }) 

我不知道如何實際使用細節。當我打印anyitems我也看到一些細節,即

[Snap (-KJ-jqTNf3MTtY8YRH-3) { 
Name = "Chris"; 
Date = "30 May 2016"; 
}, Snap (-KJ01QYoTedZkClsf13Y) { 
Name = "John"; 
Date = "30 May 2016"; 
}] 

回答

2

我不在的Xcode所以我現在無法驗證,但它應該是這樣的:

for snapshot in anyitems { 
    print(snapshot.value.objectForKey("Name")) 
} 

而且我覺得下標也應努力:

for snapshot in anyitems { 
    print(snapshot.value["Name"]) 
} 

如果你需要告訴類型編譯:

for snapshot in anyitems as! [FIRDataSnapshot] { 
    print(snapshot.value.objectForKey("Name")) 
} 

但它會更好,因爲你已經注意到,在訪問其內容之前安全地轉換數組:

if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] { 

} 
+0

謝謝您的回答。然而,Anyitems是'AnyObject'。所以不會有'snapshot.value' – Chris

+0

這就是爲什麼我做了第三個例子。 :) – Moritz

+0

哦對!我試過了,但它沒有奏效,但是當我讓... = ...並且它工作時,我將它聲明爲FIRDataSnapshot。基本上從一開始我會聲明這樣'如果讓快照= snapshot.children.allObjects爲? [FIRDataSnapshot]'並繼續我的循環,我會得到正確的輸出,謝謝! – Chris