第一次显示工作表时,状态变量似乎未正确更新。
例如,使用以下代码:
import SwiftUI
struct DemoView: View {
@State var showDetails: Bool = false
var body: some View {
VStack {
Button(action: {
showDetails = true
}) {
Text("Show sheet")
}
}.sheet(isPresented: $showDetails){
VStack {
Text("showDetails: \(showDetails ? "yes" : "no")")
}
}
}
}
struct DemoView_Previews: PreviewProvider {
static var previews: some View {
DemoView()
}
}
第一次单击时将显示“no”,第二次单击时将显示“yes”,如下所示:
我错过了什么吗?我如何确保我的状态变量被工作表视图正确读取?
2条答案
按热度按时间ou6hu8tu1#
您可以看到工作表创建时间的值。如果要跟踪父视图状态,请创建绑定到该状态的工作表子视图,如下所示。绑定将在子视图出现时更新子视图。
使用Xcode 12 / iOS 14进行测试
使用Xcode 13.3 / iOS 15.4重新测试
vh0rcniy2#
有时候不可能使用@Binding。例如,如果我们需要在init块中使用变量。我的方法是:
初始化块示例:
还有一个案例: