2017-04-13 55 views
0

我正在儘量減少向Firebase發送的數據請求數量。我有一個拉動下列數據的快照:如何從Firebase快照將變量分配給子節點中的值?

snap (Hole1) { 
GreenBackX = "40.196339"; 
GreenBackY = "-105.07354"; 
GreenCenterX = "40.196336"; 
GreenCenterY = "-105.073409"; 
GreenFrontX = "40.196342"; 
GreenFrontY = "-105.073283"; 
Hazard1 =  { 
    CarryX = "40.196839"; 
    CarryY = "-105.07104"; 
    FrontX = "40.196893"; 
    FrontY = "-105.070626"; 
    Name = "R Fwy Bunker"; 
}; 
Hazard2 =  { 
    CarryX = "40.196321"; 
    CarryY = "-105.071922"; 
    FrontX = "40.196383"; 
    FrontY = "-105.071573"; 
    Name = "L Fwy Bunker"; 
}; 
Hazard3 =  { 
    CarryX = "40.196622"; 
    CarryY = "-105.072935"; 
    FrontX = "40.196662"; 
    FrontY = "-105.072554"; 
    Name = "R Fwy Bunker 2"; 
}; 
Hazard4 =  { 
    CarryX = "40.196176"; 
    CarryY = "-105.073545"; 
    FrontX = "40.196225"; 
    FrontY = "-105.073167"; 
    Name = "L Greenside Bunker"; 
}; 
HoleH = "258.74"; 
HoleX = "40.19664"; 
HoleY = "-105.070484"; 
} 

什麼,我的目標是什麼是變量賦值,將是Hazard1\Name。到目前爲止,我只在文檔中看到了如何獲取初始值的工作示例,我喜歡這樣做:let holeX = value?["HoleX"] as? Double ?? 0,但如果您願意,我似乎無法找到任何讓我進入「第二級」的東西。

有一個例子似乎說你可以通過這種方式引用它:let hazard1Name = value?["Hazard1/Name"]但我無法讓它工作。

回答

0

A FIRDataSnapshot包含來自給定Firebase數據庫位置的數據。該數據具有已經被下載,所以沒有多少空間的優化還有,對不起:-(

我想你可能會尋找的是:

let ref: FIRDatabaseReference = ... 
ref.child("Hazard1").child("Name").observeSingleEvent(of: .value) { 
    (snapshot) in 
    let name = snapshot.value as! String 
    print("Name: \(name)") 
} 

否則,如果你只是希望得到您的數據超出上述快照,試試這個來代替:

let snapshot: FIRDataSnapshot = ... 
let data = snapshot.value as! [String: Any] 
let hazard1 = data["Hazard1"] as! [String: Any] 
let name = hazard1["Name"] as! String 
+0

謝謝@Paulo第二個就是我一直在尋找 – matador0227

+0

@ matador0227 Geat男人,好運氣在你一個! PP! –