Core data 迭代数组后显示模式via.sheet时显示的图像相同

Core data 迭代数组后显示模式via.sheet时显示的图像相同,core-data,swiftui,Core Data,Swiftui,在一个swiftui应用程序中,我迭代一组实体并显示ThumbnMail图像,并将其设置为当点击一个实体时,会显示一个带有特定全尺寸图像的细节视图。问题是,当转到详细信息屏幕时,它总是显示最新的图像 主要观点: if documents.count > 0 { ScrollView(.horizontal, showsIndicators: true) { HStack { ForEach(documents,

在一个swiftui应用程序中,我迭代一组实体并显示ThumbnMail图像,并将其设置为当点击一个实体时,会显示一个带有特定全尺寸图像的细节视图。问题是,当转到详细信息屏幕时,它总是显示最新的图像

主要观点:

   if documents.count > 0 {
        ScrollView(.horizontal, showsIndicators: true) {
            HStack {
                ForEach(documents, id: \.self.id) {(doc: Document) in
                    Image(uiImage: UIImage(data: doc.image)!)
                    .resizable()
                    .frame(width: 40, height: 50, alignment: .center)
                    .clipShape(Rectangle())
                    .cornerRadius(8)
                    .scaledToFit()
                    .onTapGesture {
                        self.showImageDetail = true

                    }
                    .padding(.all, 5)
                    .sheet(isPresented: self.$showImageDetail, content: {
                        ImageViewDetail(image: UIImage(data: doc.image)!)
                    })
                }
            }
        }
    } 
显示ImageDetailView时,它始终是保存的最新图像。以下是详细视图代码:

import SwiftUI
struct ImageViewDetail: View {
    @Environment(\.presentationMode) var presentationMode
    @State var image: UIImage
    @State var scale: CGFloat = 1.0

    var body: some View {
        VStack {
            Image(uiImage: image)
                .resizable()
                .padding()
                .scaledToFit()
                .scaleEffect(scale)
                .cornerRadius(8)
                .gesture(MagnificationGesture()
                    .onChanged {value in
                        self.scale = value.magnitude
                    }
                )

            HStack {
                Button("Back") {
                    self.presentationMode.wrappedValue.dismiss()
                }
                .buttonStyle(FillStyle(width: 86, height: 32))
                .padding(.trailing, 10)

                Button("Delete") {

                }
                .buttonStyle(FillStyle(width: 86, height: 32))
                .padding(.leading, 10)
            }
        }
        .navigationBarTitle("Image", displayMode: .inline)
    }
}

任何帮助都将不胜感激-我似乎不明白为什么ImageDetailView不显示正确的图像?非常感谢。

Bool
状态替换为
文档?
状态:

@State var selectedDocument:Document?
var body:一些观点{
HStack{
中的ForEach(documents,id:\.self.id){(doc:Document)
图像(uiImage:uiImage(数据:doc.Image)!)
.ontapsigne{
self.selectedDocument=doc
}
}
}
}
.工作表(项目:$selectedDocument){
ImageViewDetail(图像:UIImage(数据:$0.image)!)
}
}

工作表在视图层次结构中只能是一个,因此在其下方重新定位以用于
HStack
,需要添加成员
currentImage

这是一个令人生厌的方法。。。(未测试-可能需要注意选装件)

@State private var currentImage:UIImage=UIImage()/<需要的选项?
...
滚动视图(.horizontal,showsIndicators:true){
HStack{
中的ForEach(documents,id:\.self.id){(doc:Document)
图像(uiImage:uiImage(数据:doc.Image)!)
.可调整大小()
.框架(宽度:40,高度:50,对齐:。中心)
.clipShape(矩形())
.转弯半径(8)
.scaledofit()
.ontapsigne{
self.currentImage=UIImage(数据:doc.image)??UIImage()/
谢谢大家的帮助-这一个似乎很管用!现在我必须研究它为什么起作用并理解它!再次感谢。谢谢Asperi-我也会尝试你的答案!
@State private var currentImage: UIImage = UIImage() // < needed optionals?
...

ScrollView(.horizontal, showsIndicators: true) {
    HStack {
        ForEach(documents, id: \.self.id) {(doc: Document) in
            Image(uiImage: UIImage(data: doc.image)!)
            .resizable()
            .frame(width: 40, height: 50, alignment: .center)
            .clipShape(Rectangle())
            .cornerRadius(8)
            .scaledToFit()
            .onTapGesture {
                self.currentImage = UIImage(data: doc.image) ?? UIImage() // < current
                self.showImageDetail = true
            }
            .padding(.all, 5)
        }
    }
    .sheet(isPresented: self.$showImageDetail, content: { // < one sheet
                ImageViewDetail(image: self.currentImage)
            })
}