I've been going round in circles trying to figure out how to map a firebase document to a swift struct. I've got it working well, except I've now added an array within my firebase database and am having zero luck trying to map it to my struct.
Here is my struct:
import Foundation
import Firebase
struct subData {
var userID: String
var topScore: Int
var extended: Contents
init(Doc: DocumentSnapshot) {
self.userID = Doc.get("userID") as? String ?? "nil"
self.topScore = Doc.get("topScore") as? Int ?? 0
self.extended = Contents(data: Doc.get("extendedArray") as! [String: Any])!
}
}
struct Contents {
var ID00: Int
var ID01: Int
var ID02: Int
var ID03: Int
init?(data: [String: Any]) {
guard let ID00 = data["ID00"] as? Int,
let ID01 = data["ID01"] as? Int,
let ID02 = data["ID02"] as? Int,
let ID03 = data["ID03"] as? Int else {
return nil
}
self.ID00 = ID00
self.ID01 = ID01
self.ID02 = ID02
self.ID03 = ID03
}
}
Here is my Firestore Database structure:
I get the following error:
Could not cast value of type '__NSArrayM' (0x1ccc3b660) to 'NSDictionary' (0x1ccc3c628).
I know, I know...the error message is quite clear in what I'm doing wrong - but I've gone round in circles so many times I'm hoping someone can point me in the right direction....
Thanks.
Here extendedArray
self.extended = Contents(data: Doc.get("extendedArray") as! [String: Any])!
Is an array not a dictionary , so it should be
Doc.get("extendedArray") as! [[String: Any]]
Use https://github.com/alickbass/CodableFirebase for easy decoding