在模态中获取特定的 id

Get a specific id in a modal

我还在工作中学习,我的问题可能看起来很愚蠢。

我有一个电影列表,我想在点击时显示所选电影的卡片。

所以我有我的 ResultsView

    var results:[DiscoverResult]
    @State private var resultsCount:Int = 0
    @State private var isPresented:Bool = false
    
    @EnvironmentObject private var genres:Genres
    var body: some View {
        
        ScrollView {
            ForEach (results){ result in
                Button(action: {
                    isPresented.toggle()
                    
                }, label: {
                    ZStack {
                        ZStack {
                            KFImage(URL (string: baseUrlForThumb + result.posterPath)).resizable().scaledToFill()
                                .frame( height: 150)
                                .mask(Rectangle().frame( height: 150))
                            
                            Rectangle().foregroundColor(.clear)        // Making rectangle transparent
                                .background(LinearGradient(gradient: Gradient(colors: [.clear, .clear, .black]), startPoint: .top, endPoint: .bottom))
                        }.frame( height: 150)
                        // Titre du film
                        VStack(alignment: .center) {
                            Spacer()
                            Text(result.title)
                                .fontWeight(.bold)
                                .foregroundColor(.white)
                                .multilineTextAlignment(.center)
                            
                            // Genres du film
                            Text(genres.generateGenresList(genreIDS: result.genreIDS)).font(.caption).foregroundColor(.white).multilineTextAlignment(.center)
                        }     .padding()
                    }.padding(.horizontal)
                  
                    
                })
                .sheet(isPresented: $isPresented, content: {
                    MovieView(isPresented: $isPresented, movieId: result.id)
                })
                .navigationTitle(result.title)
                
            }
        }
    }
}

还有我的 MovieView


import SwiftUI

struct MovieView: View {
    @Binding var isPresented: Bool
  var movieId:Int
    var body: some View {
        VStack {
            Text(String(movieId))
                .padding()
     
            Button("Fermer") {
                isPresented = false
            }
        }
    }
    
}

但是电影卡仍然选择相同的偶数列表元素。

我认为 'result.id' 在每个循环中都会被覆盖,但我不知道如何修复它。

抱歉我的英语错误。

谢谢你的目的。

您可以使用 .sheet(item:, content:) 并传递整个 result 对象

,而不是对 .sheet 使用 isPresented
.sheet(item: $selecteditem( { result in
    MovieView(item: result)
}

要完成这项工作,您需要一个新的 属性(您可以删除 isPresented)

@State private var selectedItem: DiscoverResult?

你需要更新你的 MovieView 结构

struct MovieView: View {
    let result: DiscoverResult
    var body: some View {
        //...
    }
}

如果您愿意,也可以只将电影 ID 传递给您的 MovieView。