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

SwiftUI中如何正确显示ObservableObject的@Published整数?

解决SwiftUI分数视图不更新的问题

嗨,我来帮你搞定这个新手常踩的小坑~你的代码核心问题出在对@Published属性的访问方式上!

问题根源

你写的game.$opponentScore和game.$ownScore,获取的是@Published属性的Binding投影对象,而不是实际的整数值。所以你看到的不是分数数字,而是Binding对象的描述文本,这自然不是你想要的效果。

正确的做法是直接访问属性本身:game.opponentScore和game.ownScore。因为你已经通过@EnvironmentObject注入了Game实例,SwiftUI会自动监听@Published标记的属性变化,一旦分数更新,视图就会自动刷新。

修正后的完整代码

class Game: ObservableObject { 
    @Published var ownScore: Int = 0 
    @Published var opponentScore: Int = 0 
    // ... 你的其他方法
}

struct ScoreView: View { 
    @EnvironmentObject var game: Game 
    @State var displayOpponent: Bool 
    var body: some View { 
        VStack { 
            if displayOpponent { 
                Text("Opponent Score") 
                Text("Score: \(game.opponentScore)") // 去掉$符号,直接访问属性值
            } else { 
                Text("Your Score") 
                Text("Score: \(game.ownScore)") // 同样去掉$符号
            } 
        } 
    }
}

额外小提示

$符号的正确使用场景是双向绑定,比如需要让用户输入修改属性值时(比如TextField绑定),才会用它来获取Binding对象。像这种只需要读取显示的场景,直接访问属性就足够啦~

内容的提问来源于stack exchange,提问作者Tobilence

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:13:12