你需要创建one片材而不是multiple sheets.
如果你想使用.sheet(isPresented:content:)
您可以执行以下操作:
struct ContentView: View {
var numbers = [1, 2, 3]
@State private var selectedNumber: Int?
var body: some View {
List(numbers, id: \.self) { number in
Text("number: \(number)")
.onTapGesture {
self.selectedNumber = number
}
}
.sheet(isPresented: binding) {
Text("This is a sheet number \(self.selectedNumber ?? 0)")
}
}
var binding: Binding<Bool> {
.init(
get: { self.selectedNumber != nil },
set: { _ in }
)
}
}
或者你可以使用.sheet(item:content:)
:
struct Model: Identifiable {
let id: Int
}
struct ContentView: View {
var numbers = [1, 2, 3].map(Model.init)
@State private var selectedNumber: Model?
var body: some View {
List(numbers, id: \.id) { number in
Text("number: \(number.id)")
.onTapGesture {
self.selectedNumber = number
}
}
.sheet(item: $selectedNumber) { item in
Text("This is a sheet number \(item.id)")
}
}
}
EDIT
如果您决定使用.sheet(item:content:)
你可以添加一个扩展Int
(而不是创建符合的自定义结构Identifiable
):
extension Int: Identifiable {
public var id: Int { self }
}
如提议的阿斯佩里的回答 https://stackoverflow.com/a/63089069/8697793.