Swiftui 为什么状态值不';视图初始化后重置

Swiftui 为什么状态值不';视图初始化后重置,swiftui,Swiftui,在我的测试代码中: import SwiftUI struct A: View { @State var i: Int let a: Int init(a: Int) { self.a = a _i = State(wrappedValue: 2) print("init a=\(a) i=\(i)") } var body: some View { VStack{

在我的测试代码中:

import SwiftUI
struct A: View {
    @State var i: Int
    let a: Int
    init(a: Int) {
        self.a = a
        _i = State(wrappedValue: 2)
        print("init a=\(a) i=\(i)")
    }
    var body: some View {
        VStack{
            Text("a=\(a)")
            Text("i=\(i)")
            Button(action: {i += 1}, label: {Text("i+=1")})
        }
    }
}
struct ContentView: View {
    @State var a: Int = 22
    var body: some View {
        VStack {
            A(a: a)
            Button(action: {a += 1}, label: {Text("a+=1")})
        }
    }
}

当我按下按钮
[a+=1]
时,我可以看到打印的
init a=23 I=2
。但是视图中的值
i
未重置为2。为什么
i
总是在视图中增加?

属性被加入到特定位置的特定视图类型中,并在渲染引擎解释该视图相同时更新。是SwiftUI渲染优化的基础-它仅重新绘制内部状态已更改的视图的主体,如果视图保持不变,则不会

因此,如果需要重建整个视图,则必须显式地赋予它唯一性,例如提供
id
,如

    var body: some View {
        VStack {
            A(a: a).id(a)       // << here !!
        ...
    }
var主体:一些视图{
VStack{

A(A:A).id(A)//因为SwiftUI为您管理@State变量,即使视图被重新创建,它们也会保持活动状态。据我所知,
I
的生存期与
ContentView