SwiftUI 图像不显示来自变量的 UIImage

SwiftUI Image not showing a UIImage from variable

我想显示存储在 EnvironmentObject 中的图像(UIImage 类型)。此 EnvironmentObject 由一个包含 UIImage 元素的结构数组组成。 在一个视图中,我想显示这个数组的图像,但不知何故这不起作用。

结构如下:

struct TestStruct: Identifiable {
    var id: String
    var name: String
    var image: UIImage

    init() {
        id = ""
        name = ""
        image = UIImage.init()
    }
}

这里是 ModelData class:

final class ModelData: ObservableObject {
    @Published var testStruct: [TestStruct] = []
}

这是主应用程序代码中 modelData 的实例化:

struct TestApp: App {
    @ObservedObject private var modelData = ModelData()
    init() {...

modelData 的内容是从 Firebase 数据库和 Firebase 存储加载的。这确实有效,我可以在调试预览的 modelData.testStruct[...].image 中看到下载的图像。

从视图上看,我想引用模型数据中的图像:

struct StructContentView: View {
    @EnvironmentObject var modelData: ModelData

    var body: some View {
        ScrollView {
            Image(uiImage: modelData.testStruct[0].image)
                .frame(width: 64.0, height: 64.0)
                .foregroundColor(.red)           
        }
    }
}

有人可以帮助我吗?我通常对 ObservableObject/EnvironmentObject 之类的东西感到困惑,但我能够显示例如TextView 中 modelData.testStruct[0] 的字段“名称”。是不是将 UIImage 传递给 Image 视图是错误的?或者那里还需要什么?

在Firestone的getData完成回调中,设置为:

let reference = Storage.storage().reference(forURL: tempStruct.imageUrl)
                                reference.getData(maxSize: (1 * 1024 * 1024)) { (data, error) in
    if let _error = error{
      print(_error)
    } else {
      if let _data  = data {
        tempStruct.image = UIImage(data: _data)!
      }
    }
}

...

modelData.testStruct.append(tempStruct)

这是在应用程序启动时完成的。图像 will/shall 随后会在用户转到另一个菜单项时显示。

解决方案:

testStruct类型的图片必须改为@Published,因此也需要将testStruct改为class:

class TestStruct: ObservableObject {
    var id: String
    var name: String
    @Published var image: UIImage

    init() {
        id = ""
        name = ""
        image = UIImage.init()
    }
}