首页 > 解决方案 > 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 {///}

无论如何我可以解决这个问题吗?

将不胜感激!

标签: swiftui

解决方案


您可以使用ForEach范围:0...10.

其次,您的image数组已经包含Images,因此您不需要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。


推荐阅读