swiftui - SwiftUI - 显示图像数组
问题描述
Image
我正在使用 Apple 的 VisionKit并将图像存储在一个Data
数组中,如下所示:
@State private var image: [Image] = []
@State var imageData : Data = .init(count: 0)
并像这样附加数据:
for imageIndex in imagePerPage! {
var uiImage = UIImage(cgImage: imageIndex)
let converted = Image(uiImage: uiImage)
image.append(converted)
imageData.append(uiImage.jpegData(compressionQuality: 0.00005)!)
}
我将数据传递给另一个很好的视图,因为我可以使用print(image.count)
并且我得到了预期的计数。但是,我在遍历我的数组并显示图像时遇到了问题。我使用了一个ForEach
语句,我得到一个错误,告诉我数据类型Image
必须符合Hashable
(我没有使用模型/结构)
@State var image: [Image]
ForEach(image.count, id: \.self) { image in
Image(image)
.resizable()
.frame(width: getScreen().width, height: getScreen().height * 0.85)
.aspectRatio(contentMode: .fit)
}
我什至尝试过 for 循环 ie for x in images {///}
。
无论如何我可以解决这个问题吗?
将不胜感激!
解决方案
您可以使用ForEach
范围:0...10
.
其次,您的image
数组已经包含Image
s,因此您不需要Image
再次调用。
ForEach(0..<image.count) { imageIdx in
image[imageIdx]
.resizable()
.frame(width: getScreen().width, height: getScreen().height * 0.85)
.aspectRatio(contentMode: .fit)
}
现在,话虽如此,我对将Image
视图保留在数组中的想法有点怀疑。我认为你最好让你的数组充满UIImage
对象,然后在视图Image(uiImage:)
内部调用它们。
可能看起来更像这样:
@State var images: [UIImage]
var body: some View {
ForEach(0..<images.count) { imageIdx in
Image(uiImage: images[imageIdx])
.resizable()
.frame(width: getScreen().width, height: getScreen().height * 0.85)
.aspectRatio(contentMode: .fit)
}
}
最后,如果您的数组使用图像更新,因为 SwiftUI 可能不知道刷新视图,因此使用ForEach
索引而不是 ID可能会在以后导致有趣的问题。那时,最好对图像使用结构包装器并为它们提供真实的 ID。
推荐阅读
- javascript - 使用原型模式时将参数传递给对象
- node.js - 从标准输出读取一个问题并将响应写入标准输入
- pandas - Pandas groupby 变换协方差
- android - 来自数据类 .copy() 的新对象
- javascript - SignalR 动态集线器名称
- javascript - 将空白重定向组件加载到 Iframe Angular 4
- javascript - 如何检查 Aurelia 中的页面加载是否完成
- javascript - 三次失败登录尝试重定向的计数器不执行任何操作
- android - 静默 Google 登录:为什么选择帐户后显示对话框
- c# - C# - (绘图列 - 右上角)drawString 问题