如何使用SwiftUI使包裹在状态属性更新中的视图

时间:2020-06-17 22:30:27

标签: swiftui swiftui-state

下面的代码创建一个简单的HStack,其结果如下所示: preview

问题在于,单击“增量”会增加“计数”,而不是“嵌套”。有谁知道为什么会这样,并且可能如何解决?还是当SwiftUI视图嵌套在State变量中时,它们会从根本上中断吗?

struct ContentView: View {
  var body: some View {
    VStack {
      Text("Count: \(count)")
      nested
      Button(action: {
        self.count += 1
        self.nested.count += 1
      }) { Text("Increment") }
    }
  }
  @State var count = 0

  struct Nested: View {
    var body: some View {
      Text("Nested: \(count)")
    }
    @State var count = 0
  }
  @State var nested = Nested()
}

1 个答案:

答案 0 :(得分:0)

SwiftUI旨在“嵌套”视图,但是您没有按预期使用它。状态变量用于视图所拥有的数据,而嵌套视图并非(至少,通常不是)通常是视图所拥有的数据,因此它不必是状态变量。

相反,您只能将count变量作为Nested视图的参数,并且只要父级中的count状态变量发生变化,它的主体就会重新呈现:

struct ContentView: View {
  var body: some View {
    VStack {
      Text("Count: \(count)")

      Nested(count: count) // pass the count as an init param

      Button(action: {
        self.count += 1
        self.nested.count += 1
      }) { Text("Increment") }
    }
  }

  @State var count = 0

  struct Nested: View {
    var body: some View {
      Text("Nested: \(count)")
    }
    var count: Int
  }
}