swiftui状态变量计数丢失了它存储的内容
当我单击“捕捉手势事件”进行设置时swiftui状态变量计数丢失了它存储的内容,swiftui,state,Swiftui,State,当我单击“捕捉手势事件”进行设置时 self.showDetailView = true self.count = 5 工作表将弹出,但self.count始终为0,而不是 5。 因此,代码文本(“5555”)将永远不会被命中 状态变量计数似乎丢失了它存储的内容 import SwiftUI struct ContentView: View { @State var showDetailView = false @State var count = 0 var
self.showDetailView = true
self.count = 5
工作表将弹出,但self.count始终为0
,而不是
5
。
因此,代码文本(“5555”)
将永远不会被命中
状态变量计数似乎丢失了它存储的内容
import SwiftUI
struct ContentView: View {
@State var showDetailView = false
@State var count = 0
var testArr = [1,2,3,4,5]
var body: some View {
NavigationView {
List(testArr.indices){ indice in
Text("row num \(indice)")
.onTapGesture{
self.showDetailView = true
self.count = 5
}
}
.sheet(isPresented: self.$showDetailView) {
if self.count == 0{
// print("count = 0")
}
if self.count == 5{
Text("5555")
}
}
.navigationBarTitle("Your Reading")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
您可以使用
@Binding
将值传递给子视图:
struct DetailView: View {
@Binding var count: Int
var body: some View {
if count == 5 {
Text("5555")
} else {
EmptyView()
}
}
}
在工作表中
:
.sheet(isPresented: self.$showDetailView) {
if self.count == 0 {
// print("count = 0")
}
DetailView(count: $count)
}
另一种方法是:
class CountModel: ObservableObject {
@Published var count: Int = 0
init(_ c: Int) { self.count = c }
}
struct ContentView: View {
@State var showDetailView = false
@ObservedObject var model = CountModel(0)
var testArr = [1,2,3,4,5]
var body: some View {
NavigationView {
List(testArr.indices) { indice in
Text("row num \(indice)")
.onTapGesture {
self.model.count = 5
self.showDetailView = true
}
}
.sheet(isPresented: self.$showDetailView) {
if self.model.count == 0 {
let _ = print("count = 0")
Text("0000")
}
if self.model.count == 5 {
let _ = print("count = 5")
Text("5555")
}
}
.navigationBarTitle("Your Reading")
}
}
如果您更改@Published var count:Int?=0我已经创建了另一个帖子,可能是不同的问题。