这似乎是一个简单的问题,但我正在努力在网上找到任何关于它的资源.
例如,我有以下代码:
import SwiftUI
struct ChildView: View {
@Binding var parentText: String
@State var childText: String = ""
var body: some View {
Form {
TextField("Parent Text", text: $parentText)
TextField("Child Text", text: $childText)
}
}
}
struct ParentView: View {
@State var parentText: String = ""
var body: some View {
VStack {
Text(parentText)
ChildView(parentText: $parentText)
}
}
}
#Preview {
ParentView()
}
为了测试,我运行了这段代码,并将子文本设置为"C",然后将父文本设置为"P".这样做很好,并导致视图中的P和C的形式.我想知道的是,为什么当我将父文本更新为"P"时,子文本没有设置为空字符串.
我对@State的理解是,当parentText发生更改时,ParentView主体将重新加载,这意味着它将重新初始化ChildView(),并且我也会预期ChildText也将被重新初始化为空字符串.显然,情况并非如此.
这一切为什么要发生?这只是SWIFT的优化,我一般不能依赖,还是这种行为是可预测的?如果它是可预测的,那么在什么条件下,子视图状态变量将保持它们的值?