【发布时间】:2020-01-17 08:34:08
【问题描述】:
我无法更新 ExampleView 的 message var,即使我可以看到 updateMessage() 正在被调用。这是我的 Playground 代码的简化/复杂的 SwiftUI 示例,它不起作用。在 updateMessage() 中调用时,message 变量不会更新。因此,UI Text() 也不会更新。
为什么@State var 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。您将ExampleView的状态设置为ContentView.body,这是不允许的。我认为这是你应该使用@Binding的地方。