2017-04-13 51 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! –