我在firebase上有一个json数据库,并尝试将它们放入本地字典数组中。
我在Firebase上的json模型
我的结构模型也如下所示
struct Places {
var type:String!
var country:String!
var name:String!
var image:String!
var coords:[Coords]!
init(type: String, country: String, name: String, image: String, coords: [Coords]) {
self.type = type
self.country = country
self.name = name
self.image = image
self.coords = coords
}
init(snapshot: FIRDataSnapshot) {
let snapshotValue = snapshot.value as! [String:Any]
type = snapshotValue["type"] as! String
country = snapshotValue["country"] as! String
name = snapshotValue["name"] as! String
image = snapshotValue["image"] as! String
coords = snapshotValue["coords"] as! [Coords]!
}
}
还有[Coords]结构模型如下:
struct Coords {
var latStart:String!
var latEnd:String!
var lonStart:String!
var lonEnd:String!
init(latStart: String, latEnd: String, lonStart: String, lonEnd: String) {
self.latStart = latStart
self.latEnd = latEnd
self.lonStart = lonStart
self.lonEnd = lonEnd
}
}
我正试图通过以下代码获取和放置json数据:
placesRef.observeSingleEvent(of: .value, with: { (snapshot) in
if !snapshot.exists() {
print("data not exist")
return
}
var plc: [Places] = []
for eachPlace in (snapshot.children){
let place = Places(snapshot: eachPlace as! FIRDataSnapshot)
plc.append(place)
}
self.allPlaces = plc
问题是我可以在字典数组中获取除字典之外的字典数组。 [Coords]字典似乎无效,我想知道问题是什么。谢谢你的任何建议。
答案 0 :(得分:0)
因为snapshotValue["coords"] as! [Coords]!
还不是Coords
。它们只是字典。您必须遍历snapshotValue[“coords”]
中的每个字典并初始化Coords
对象,然后当您完成将它们全部分组到一个数组中并将其分配给self.coords
Places
时结构。 map
函数非常方便。
示例:强>
我会将Coords
init函数更改为:
init(dictionary: [String : AnyObject]) {
self.latStart = dictionary["lat1"] as? String
//...
//...
}
然后在Places
init中使用类似:
coords = (snapshotValue["coords"] as? [[String : AnyObject]])?.map({ Coord(dictionary: $0) })
我没有对此进行测试并在此做出一些假设,但你应该能够做出类似的工作。