我使用苹果的VisionKit并将图像存储在Image和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循环,即for x in images {///}。
我是否可以解决这个问题呢?
会很感激的!
发布于 2021-02-22 20:38:28
您可以使用ForEach的范围:0...10。
其次,image数组已经保存了Image,因此不需要再次调用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)
}
}最后,如果您的数组使用图像更新(因为ForEach可能不知道刷新视图),那么使用索引而不是ID使用ForEach可能会导致一些有趣的问题。此时,最好对图像使用struct包装器,并为它们提供真正的ID。
https://stackoverflow.com/questions/66323020
复制相似问题