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我已经创建了另一个帖子,可能是不同的问题。