import SwiftUI
struct ContentView: View {
@State var msg: String = ""
var body: some View {
VStack {
Button(action: {
self.msg += "Hallo World "
}, label: { Text("Say Hallo")})
ChildView(msg: msg).padding().background(Color.orange)
Text(msg).padding().background(Color.green)
}.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
struct ChildView: View {
var msg: String
var body: some View {
Text(msg)
}
}
Вам не требуется никакой оболочки свойств состояния в вашем ChildView. Как только msg изменилось, SwiftUI знает, что каждое представление в зависимости от его значения должно быть «перезагружено».
В вашем примере вы «исправили» его, поместив начальное значение в оболочку его свойства состояния, SwiftUI не будет перезагружать его, поскольку обертка свойства @State означает, что значение хранится вне ChildView. Оболочка свойства @State не является частью состояния View. Напротив, после изменения свойства @State SwiftUI переоценивает вычисляемое тело свойства View. Чтобы «сбросить» обернутое значение свойства @State, вам необходимо «воссоздать» его, что означает, что свойство состояния также будет сброшено до его начального значения.
