SwiftUI工作表显示数据错误的工作表



我有一个显示1、2和3的列表。当点击文本时,应用程序会打开一张带有点击数字的表格。但是,如果我点击第二行或第三行中的文本,则图纸中显示的数字仍然是1。我做错了什么?

import SwiftUI
struct ContentView: View {

var numbers = [1, 2, 3]
@State private var shouldPresentSheet = false

var body: some View {
List(self.numbers, id: .self) { number in
Text("number: (number)").sheet(isPresented: self.$shouldPresentSheet) {
Text("This is sheet number (number)")
}.onTapGesture {
self.shouldPresentSheet.toggle()
}
}
}
}

您需要创建一个工作表,而不是

多个如果您想使用.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)")
}
}
}

编辑

如果您决定使用.sheet(item:content:),您可以向Int添加扩展(而不是创建符合Identifiable的自定义结构(:

extension Int: Identifiable {
public var id: Int { self }
}

正如Asperi的回答中所提出的那样。

最新更新