我目前正在开发一个用户可以在地图上保存注释的应用程序,这一切都很棒!地图位置,名称和副标题都被发送到数据库,并且引脚被放入地图中。
但是,我正在努力弄清楚如何从[Firebase] [1]中提取这些数据,以便用户能够编辑以前的信息然后更新它。
答案 0 :(得分:2)
要读取数据,您需要使用firebase参考中的observe属性。这会返回由您的数据组成的snapshot
。
由于您的Skatepark
类已经有快照构造函数,因此您只需将快照传递给它并创建对象。
reference.child("yourNode").observeSingleEvent(of: .value, with: { (snapshot) in
/* Two things can happen here. Snapshot can either consist of one element or multiple.
To handle this, you want to iterate through the snapshot, create your Skatepark
object and populate it into your global skatepark array.
*/
if snapshot.value is NSNull
{
print("Error Getting Snapshot")
}
else
{
for (child in snapshot.children)
{
let snap = child as! FIRDataSnapshot
let skateObject = Skatepark(child) // this calls the constructor which take snapshot as parameter
globalSkateParkArray.append(skateObject)
}
}
})
要更新您的值,您只需要this。
个人建议
coordinate
,name
,subtitle
改为var
而不是let
。在将数据发送到数据库之前,请先考虑先从数据中创建一个Skatepark
对象。这个构造函数应该做的伎俩
init(coordinate: CLLocationCoordinate2D, name: String, subtitle: String, type: SkateboardType, editable: Bool)
{
self.coordinate = coordinate
self.name = name
self.subtitle = subtitle
self.type = type
self.editable = editable
}
我在dictionary
内创建一个Skatepark
变量,用于从对象创建一个字典。这样我就不会在我的代码库中浮动["lat": locationManager.location?.coordinate.latitude, "lng": locationManager.location?.coordinate.longitude, "name": skateTitleText, "subtitle": skateStyleText, "type": (selected - 1), "editable": true]
。
所以在你的课堂上有这个
var dictionary: [String:Any]
{
return
[
"lat": coordinate.latitude,
"lng": coordinate.longitude,
"name": title,
"subtitle": subtitle,
"type": type,
"editable": editable
]
}
每当您想要从对象中删除字典时,只需使用object.dictionary