SwiftUI如何在新视图中链接ForEach索引和照片索引?

SwiftUI如何在新视图中链接ForEach索引和照片索引?,swiftui,Swiftui,如何在新视图中链接forEach索引和照片索引?尝试按按钮打开新视图。这个新视图有一个旋转木马,它是由这个结构创建的。通过NavigationLink打开视图时,carouselList中的所有照片都会正确显示,具体取决于索引,但按钮不起作用,始终打开第一个索引 struct Catalog: View { @State private var isOpen = false var shop: Shop = shops[0] var picture: Picture = pictures

如何在新视图中链接forEach索引和照片索引?尝试按按钮打开新视图。这个新视图有一个旋转木马,它是由这个结构创建的。通过NavigationLink打开视图时,carouselList中的所有照片都会正确显示,具体取决于索引,但按钮不起作用,始终打开第一个索引

 struct Catalog: View {
 @State private var isOpen = false
 var shop: Shop = shops[0]
 var picture: Picture = pictures[0]

 var body: some View {           
 ScrollView(.vertical, showsIndicators: false) {
            VStack(spacing: 0) {
                ScrollView(.horizontal, showsIndicators: false) {
                    HStack {
                        ForEach(0..<shops.count, id: \.self) { index in
                            Button(action: {
                                self.isOpen.toggle()
                            }) {
                                ShopItem(shop: shops[index])
                            } .sheet(isPresented: $isOpen) {
                                PictureItem(picture: pictures[index])
                            }
                        }
                    }
                    .padding(.top, 10)
                }
            }
        }
struct目录:视图{
@国家私有变量isOpen=false
var车间:车间=车间[0]
变量图片:图片=图片[0]
变量体:某些视图{
滚动视图(.vertical,showsIndicators:false){
VStack(间距:0){
滚动视图(.horizontal,showsIndicators:false){
HStack{

ForEach(0..这是因为每个视图只能放置一次.sheet修改器。因此,当您使用此代码时,它仅在第一个循环中配置.sheet。我建议对这种类型的segue使用NavigationLink

如果需要强制执行此操作,可以(1)将.sheet移到ForEach之外,(2)为所选图片创建@State变量,(3)在切换isOpen之前更新按钮中的该变量,然后在图片中为所选变量使用@Binding。如下所示:

struct Catalog: View {
    
    @State private var isOpen = false
    var shops: [String] = ["One", "two", "three"]
    var shop: String = "ONE"
    var pictures: [String] = ["one", "two", "three"]
    @State var picture: String = "PIC ONE"
    
    var body: some View {
        ScrollView(.vertical, showsIndicators: false) {
            VStack(spacing: 0) {
                ScrollView(.horizontal, showsIndicators: false) {
                    HStack {
                        ForEach(0..<shops.count, id: \.self) { index in
                            Button(action: {
                                self.picture = pictures[index]
                                self.isOpen.toggle()
                            }) {
                                Text(shops[index])
                            }
                        }
                    }
                    .padding(.top, 10)
                }
                .sheet(isPresented: $isOpen) {
                    PictureItem(string: $picture)
                }
            }
        }
    }
}

struct PictureItem: View {
    
    @Binding var string: String
    
    var body: some View {
        Text(string)
    }
}
struct目录:视图{
@国家私有变量isOpen=false
变量商店:[字符串]=[“一”、“二”、“三”]
var-shop:String=“一”
变量图片:[字符串]=[“一”、“二”、“三”]
@状态变量图片:String=“PIC ONE”
var body:一些观点{
滚动视图(.vertical,showsIndicators:false){
VStack(间距:0){
滚动视图(.horizontal,showsIndicators:false){
HStack{
ForEach(0。。