我无法更新ExampleView的'message'变量,即使我可以看到updateMessage()被调用。以下是我的简化/混乱的SwiftUI Playground代码示例,它无法工作。当在updateMessage()中调用时,'message'变量不会被更新。因此,UI 'Text()'也不会被更新。
为什么@State变量'message'没有更新?正确的更新方式是什么?
import SwiftUI
import PlaygroundSupport
struct ContentView: View {
let coloredLabel = ExampleView()
var body: some View {
VStack {
coloredLabel
.foregroundColor(Color.red)
.padding()
Button(action: {
self.coloredLabel.updateMessage()
}) {
Text("Press me")
}
}
}
}
struct ExampleView: View {
@State private var message: String = "Hello"
var body: some View {
Text(self.message)
}
func updateMessage() {
print("updateMessage ran") // this prints
self.message = "Updated"
}
}
PlaygroundPage.current.setLiveView(ContentView())
body
块内设置其State
。你正在ContentView.body
中设置ExampleView
的状态,这是不允许的。我认为你应该使用@Binding
。 - Sweeper