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
相关产品推荐
相关产品推荐

