SwiftUI中如何向结构体组件传递参数?
SwiftUI自定义按钮绑定父视图状态的解决方法
你的问题核心是没搞清楚SwiftUI中状态传递的正确方式,下面直接给你修正方案:
问题分析
- 父视图的
currentCalcToChange是@State变量,要让子组件能修改它,子组件必须用@Binding来接收,而不是@State - 按钮自身的点击变色状态
didTap属于组件内部状态,用@State是对的
修正后的完整代码
struct ContentView: View { // 父视图的状态变量 @State var currentCalcToChange: Int = 0 var body: some View { // 传递绑定值,用$前缀获取State的绑定 CustomButton(currentCalc: $currentCalcToChange) } } struct CustomButton: View { // 按钮自身的点击状态,内部管理用@State @State private var didTap: Bool = false // 接收父视图的绑定,用@Binding @Binding var currentCalc: Int var body: some View { Button(String(currentCalc)) { // 修改绑定变量,父视图的currentCalcToChange会同步更新 currentCalc += 100 // 切换按钮自身的点击状态 didTap.toggle() // 用toggle()比直接赋值true更合理,点击一次切换一次 } .background(didTap ? Color.blue : Color.yellow) } }
关键改动说明
- 子组件接收方式:把
@State var currentCalc: Int改成@Binding var currentCalc: Int,这样子组件就能和父视图的状态双向绑定 - 父视图传递方式:调用
CustomButton时用$currentCalcToChange,$符号是获取@State变量的绑定实例 - 点击状态优化:用
didTap.toggle()替代直接赋值true,这样每次点击都会切换颜色,更符合"点击切换颜色"的需求
内容的提问来源于stack exchange,提问作者dinolin
相关产品推荐
相关产品推荐

