【发布时间】:2020-10-02 12:12:56
【问题描述】:
在视图加载时,我想根据 Firebase 实时数据库更新 ImageDataModel 的收藏值。
//ImageDataModel.swift
struct ImageDataModel {
var image: String
var title: String
var favorite: String
}
extension ImageDataModel {
static var data: [ImageDataModel] = [
ImageDataModel(image: "image_1", title: "XXXXX", favorite: "N"),
ImageDataModel(image: "image_2", title: "YYYYY", favorite: "N"),
ImageDataModel(image: "image_3", title: "ZZZZZ", favorite: "N")
]
}
初始视图
struct ImageStepView: View {
var data: ImageDataModel
var ref: DatabaseReference = Database.database().reference()
var userID = UIDevice.current.identifierForVendor!.uuidString
var body: some View {
VStack{
...
}.onAppear { self.getFavoriteImages() }
}
func getFavoriteImages(){
ref.child("users").child(userID).observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
print("value::",value ?? "") // value:: {"image_1" = "Y"; "image_3" = "Y";}
//Here I want to update the ImageDataModel
}) { (error) in
print(error.localizedDescription)
}
}
}
例如,如果 Firebase 返回值包含 {"image_1" = "Y"; "image_3" = "Y";},那么我想像这样更新我的 ImageDataModel:
extension ImageDataModel {
static var data: [ImageDataModel] = [
ImageDataModel(image: "image_1", title: "XXXXX", favorite: "Y"),
ImageDataModel(image: "image_2", title: "YYYYY", favorite: "N"),
ImageDataModel(image: "image_3", title: "ZZZZZ", favorite: "Y")
]
}
//Firebase 数据结构示例
{
"A9E41390-7557-4FE3-A319-B4472048AF94" : {
"image_1" : "Y",
"image_3" : "Y"
}
}
我不确定这是否是最好的方法,但我非常感谢任何帮助。
【问题讨论】:
-
我不确定我是否理解您实现此功能的问题所在。但是,如果您编辑您的问题以在
/users/$userID显示 JSON(作为文本,请不要截图),这可能会有所帮助。您可以通过单击Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接来获取此信息。 -
感谢您的回答,我已经编辑了问题。我的实际需要是操纵
ImageDataModel。例如更改favorite值。
标签: ios swift firebase firebase-realtime-database swiftui