You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:54:03