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()
}
}
我想显示存储在 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()
}
}