SwiftUI点击按钮后Text未更新,求确认代码写法是否正确
问题原因
你的代码核心问题是body属性内的两个平级视图(Button和Text)没有使用布局容器包裹。SwiftUI 的 ViewBuilder 规则要求,当一个视图的body包含多个子视图时,必须用VStack/HStack/ZStack/Group这类容器进行包裹,否则后续子视图不会被正确纳入视图更新链路,也就不会响应@State属性的变更。
你当前代码里@State的用法是完全正确的,所以变量a的数值会正常递增(控制台打印正常),但因为Text没有被正确识别为依赖a的子视图,所以不会触发重绘,一直显示初始值0。
修复后的代码
import SwiftUI import PlaygroundSupport struct FirstApp: View { @State var a = 0 var body: some View { // 新增垂直布局容器包裹所有子视图 VStack(spacing: 20) { Button("test") { increment() print(a) } Text(String(a)) } .padding() } func increment() { a += 1 } } PlaygroundPage.current.setLiveView(FirstApp())
补充说明
如果不需要特定的排列布局,只是要让多个子视图能被正确识别,也可以用Group作为容器,不会改变原有视图的布局特性。
内容的提问来源于stack exchange,提问作者Kiko314
相关产品推荐
相关产品推荐

