Firestore 数组到 swift 结构的映射
Firestore array to swift struct mapping
我一直在兜圈子试图弄清楚如何将 firebase 文档映射到 swift 结构。我已经让它运行良好,除了我现在在我的 firebase 数据库中添加了一个数组并且尝试将它映射到我的结构时运气为零。
这是我的结构:
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
}
}
这是我的 Firestore 数据库结构:
我收到以下错误:
Could not cast value of type '__NSArrayM' (0x1ccc3b660) to 'NSDictionary' (0x1ccc3c628).
我知道,我知道...错误消息很清楚我做错了什么 - 但我已经绕了很多圈我希望有人能指出我正确的方向....
谢谢。
这里extendedArray
self.extended = Contents(data: Doc.get("extendedArray") as! [String: Any])!
是数组不是字典,所以应该是
Doc.get("extendedArray") as! [[String: Any]]
根据模型,下面的模型是正确的解,
struct subData {
var userID: String
var topScore: Int
var extended:[[String:Any]]
init(Doc: DocumentSnapshot) {
self.userID = Doc.get("userID") as? String ?? "nil"
self.topScore = Doc.get("topScore") as? Int ?? 0
self.extended = Doc.get("extendedArray") as! [[String: Any]]
}
}
另请注意,如果 var extended: NSDictionary?
属于字典类型,则应使用 self.extended = Doc.get("extendedArray") as? NSDictionary
而不是明智地依赖于数组或字典或任何其他类型。
我一直在兜圈子试图弄清楚如何将 firebase 文档映射到 swift 结构。我已经让它运行良好,除了我现在在我的 firebase 数据库中添加了一个数组并且尝试将它映射到我的结构时运气为零。
这是我的结构:
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
}
}
这是我的 Firestore 数据库结构:
我收到以下错误:
Could not cast value of type '__NSArrayM' (0x1ccc3b660) to 'NSDictionary' (0x1ccc3c628).
我知道,我知道...错误消息很清楚我做错了什么 - 但我已经绕了很多圈我希望有人能指出我正确的方向....
谢谢。
这里extendedArray
self.extended = Contents(data: Doc.get("extendedArray") as! [String: Any])!
是数组不是字典,所以应该是
Doc.get("extendedArray") as! [[String: Any]]
根据模型,下面的模型是正确的解,
struct subData {
var userID: String
var topScore: Int
var extended:[[String:Any]]
init(Doc: DocumentSnapshot) {
self.userID = Doc.get("userID") as? String ?? "nil"
self.topScore = Doc.get("topScore") as? Int ?? 0
self.extended = Doc.get("extendedArray") as! [[String: Any]]
}
}
另请注意,如果 var extended: NSDictionary?
属于字典类型,则应使用 self.extended = Doc.get("extendedArray") as? NSDictionary
而不是明智地依赖于数组或字典或任何其他类型。