SwiftUI 工作表显示数据错误的工作表
Posted
技术标签:
【中文标题】SwiftUI 工作表显示数据错误的工作表【英文标题】:SwiftUI sheet shows sheet with wrong data 【发布时间】:2020-08-15 13:26:41 【问题描述】:我有一个显示 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()
【问题讨论】:
考虑这个解决方案***.com/a/63089069/12299030 - 你也有同样的问题。 @Asperi 我完全忘记了扩展Int
,谢谢。
【参考方案1】:
您需要创建 一个 工作表而不是 多个 工作表。
如果您想使用.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's answer 中建议的那样。
【讨论】:
以上是关于SwiftUI 工作表显示数据错误的工作表的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI-> 线程 1:致命错误:未找到 MyObject.Type 类型的可观察对象(工作表中的 EnvironmentObject)