SwiftUI调用HeaderView提示Missing argument 'hideNew' in call报错
问题说明
- 实现目标:点击作为按钮使用的图片时切换Bool类型变量取值,控制对应视图的显示/隐藏
- 触发报错:调用
HeaderView()时抛出错误:Missing argument parameter 'hideNew' in call - 原代码如下:
struct ContentView: View { @State private var hideNew: Bool = true var body: some View { ZStack { VStack { HeaderView() // 报错位置:Missing argument parameter 'hideNew' in call .padding(.bottom, -1.5) ScrollView { CountdownView() } Spacer() } .frame(width: 600, height: 500) if hideNew == false { NewDateView() } } } } // 头部区域视图 struct HeaderView: View { var buttonSize: CGFloat = 25 @Binding var hideNew: Bool var body: some View { Spacer() .frame(maxHeight: 10) HStack { Spacer() Text("Date Countdown") .font(.largeTitle) .padding(.trailing, -buttonSize) Spacer() Image(systemName: "plus") .padding(.trailing, 10) .frame(width: buttonSize, height: buttonSize) .onTapGesture { hideNew.toggle() // 误以为问题出在这里 } } Spacer() .frame(height: 10) ExtendedDivider() .frame(height: 1.5) } }
错误原因
hideNew.toggle()写法本身没有问题,这是Bool类型的标准方法,用来直接翻转布尔值,在@Binding修饰的属性上调用完全合法。
真正的问题出在HeaderView的调用环节:@Binding修饰的属性不会自动生成默认值,初始化HeaderView时必须显式传入对应的双向绑定参数,空参调用HeaderView()缺失了这个必填参数,所以触发报错。
修复方法
在ContentView中调用HeaderView时,传入@State变量hideNew的绑定引用即可。SwiftUI中给子视图传@Binding参数时,需要在状态变量名前加$前缀来传递双向绑定,这样子视图对变量的修改会同步到父视图状态,触发UI更新。
修改后的调用代码:
HeaderView(hideNew: $hideNew) .padding(.bottom, -1.5)
修改后点击加号图片就可以正常切换hideNew的值,控制NewDateView的显隐。
内容的提问来源于stack exchange,提问作者lhunt
相关产品推荐
相关产品推荐

