gpt4 book ai didi

ios - 如何使用 FIRebase 将带有对象的字典追加到数组中

转载 作者:行者123 更新时间:2023-11-30 11:26:39 26 4
gpt4 key购买 nike

我正在使用 firebase,我可以获得如下所示的字典作为响应:

▿ 0 : 2 elements
- key : "maskForHair"
▿ value : 3 elements
▿ 0 : 2 elements
- key : id
- value : 1
▿ 1 : 2 elements
- key : name
- value : Hair Mask
▿ 2 : 2 elements
- key : note
- value : asd
▿ 1 : 2 elements
- key : "hairShampo"
▿ value : 3 elements
▿ 0 : 2 elements
- key : id
- value : 0
▿ 1 : 2 elements
- key : name
- value : hairShampo
▿ 2 : 2 elements
- key : note
- value : asd

现在我正在尝试使用这个字典填充 tableView,但是我找不到一种方法将此字典附加到数组中,有什么想法吗?

这就是我的 getCategories 函数的样子:

func getCategories(){

dbHandle = dbRefernce?.child("categories").observe(.value, with: { (snapshot) in
if let dictionary = snapshot.value as? [String : Any]{

print(dictionary)

let category = Categories(dictionary: dictionary)
self.categoriesArr.append(category)

DispatchQueue.main.async {
self.categoriesTableView.reloadData()
}
}
})
}

这是我的类别类的样子:

import Foundation
import UIKit

class Categories: NSObject {

var name : String? = nil
var id : Int? = nil
var note : String? = nil

init (dictionary: [String: Any]) {
super.init()
name = dictionary["name"] as? String
id = dictionary["id"] as? Int
note = dictionary["note"] as? String
}

}

最佳答案

我首先将您的模型重命名为诸如 HairCategory 之类的单一名称。

您需要迭代从数据库收到的快照的子项。每个子项都应该是一个 [String : Any] 字典,然后可以将其转换为 HairCategory

类似这样的事情:

let children = snapshot.children.compactMap { $0 as? DataSnapshot }
let cateroryDictionaries = children.compactMap { $0.value as? [String:Any] }
let categories = cateroryDictionaries.map { dict -> HairCategory in
return HairCategory.init(dictionary: dict)
}

然后categories的类型为:[HairCategory]。如果您还将 self.categoriesArr 设为 [HairCategory] 类型,则可以附加新获取的类别:)

编辑:

我还建议您看一下这个库:CodableFirebase。它使从 DataSnapshot 到模型的转换以及其他方式的转换非常容易。

编辑

只是为了澄清...您不能“将字典...附加到数组”,您需要将字典转换为数组,然后可以将该数组附加到相同类型的另一个数组:)

关于ios - 如何使用 FIRebase 将带有对象的字典追加到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50665836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com