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