SwiftUI:如何根据集合状态切换按钮点击后的背景颜色?
解决SwiftUI按钮点击切换背景色的问题
你需要做两个关键修改来实现需求:
- 用
@State修饰集合变量,确保状态变化能触发视图刷新 - 根据集合是否包含1,动态设置按钮背景色
修改后的完整代码:
import SwiftUI struct ContentView: View { // 用@State修饰,让集合变化时自动更新视图 @State var ExcludedNumbers = Set([0]) var body: some View { Button("1") { // 简化点击逻辑:判断是否包含1,插入或移除 if ExcludedNumbers.contains(1) { ExcludedNumbers.remove(1) } else { ExcludedNumbers.insert(1) } print(ExcludedNumbers) } .padding(EdgeInsets(top: 10, leading: 20, bottom: 10, trailing: 20)) // 动态设置背景色:包含1时红色,否则绿色 .background(ExcludedNumbers.contains(1) ? .red : .green) .clipShape(Circle()) } } #Preview { ContentView() }
关键说明
@State:SwiftUI通过状态变量追踪变化,只有标记为@State的变量更新时,视图才会重新渲染,这样背景色才能跟着变化- 动态背景色:使用三元运算符
? :,根据ExcludedNumbers.contains(1)的结果直接切换背景色 - 简化点击逻辑:去掉冗余的
== false/== true判断,代码更简洁
内容的提问来源于stack exchange,提问作者Vanilla
相关产品推荐
相关产品推荐

