我正在使用此代码访问 Firebase 数据库,但我无法弄清楚如何读取字符串子数组。 (JSON 结构如下))。我的代码返回顶级项目,但不返回字符串列表。有人可以帮助解决这个问题吗?
这是我从数据库读取的函数:
func sizes(userId: String = Auth.auth().currentUser!.uid, success: @escaping ([Sizes]) -> ()) {
let ref = Router.sizes.reference()
let query = ref.queryOrdered(byChild: "name") //userId)
query.observe(.value, with: { snapshot in
var array = [Sizes]()
for child in snapshot.children {
if let size = Mapper<Sizes>().map(JSON: (child as! DataSnapshot).value as! [String : AnyObject]) {
array.append(size)
}
}
success(array)
})
}
我的 Firebase JSON 如下:
{
"-SzCat_001": {
"name": "Womans",
"sizeCategories": {
"name": "Pants",
"sizeDescriptor": [
"00",
"0",
"2",
"4",
"6",
"8",
"10",
"12",
"XL"
]
}
}
}
这就是我得到的返回?
[0] = { name = "Womans" sizeCategories = 0 values {} }
我正在尝试弄清楚如何将字符串的 sizeCategories 列表读取为大小的子数组。
这是我对尺寸和尺寸类别的定义:
struct Sizes: Mappable {
var name: String = ""
var sizeCategories = [SizeCategories]()
init() {
}
init?(map: Map) {
}
mutating func mapping(map: Map) {
name <- map["name"]
sizeCategories <- map["sizeCategories"]
}
}
struct SizeCategories: Mappable {
var name: String = ""
var sizeDescriptor = [String]()
init() {
}
init?(map: Map) {
}
mutating func mapping(map: Map) {
name <- map["name"]
sizeDescriptor <- map["sizeDescriptor"]
}
}
感谢您的帮助!!!
最佳答案
为了读取这里的数据,您需要经历很多困难。你可以只是 let allMyData = snapshot.value as! [String: AnyObject]
并且知道每个内部值也是 [String: AnyObject]
。但如果你真的想用这种映射技术解构成更多类型的东西,看看你的 sizes
定义:
var sizeCategories = [SizeCategories]()
这表示“sizeCategories 是 SizeCategories 类型的数组”。但您的数据不是结构化为数组,而是一个字典:
"sizeCategories": {
"name": "Pants",
"sizeDescriptor": [
"00",
"0",
"2",
"4",
"6",
"8",
"10",
"12",
"XL"
]
}
您需要在此处调整该字段的定义和映射方法。
关于objective-c - 如何从 firebase 数据库读取一小节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47085733/