SwiftUI中如何声明绑定Enum类型的变量?
SwiftUI中绑定Enum类型变量的正确方式
错误原因
你遇到的两个错误(Cannot infer contextual base in reference to member、No exact matches in call to initializer)是因为**@Binding类型的变量不能在子视图中直接设置默认值**。Binding的作用是在父视图和子视图间共享状态,它的初始值必须由父视图通过$语法传递过来,子视图本身不能给Binding变量赋初始值。
修复后的代码
子视图修改
移除KeyboardBackLightResultView中@Binding变量的默认值赋值:
struct KeyboardBackLightResultView: View { // 去掉默认值 = .byDefault @Binding var isKeyboardBackLightAvailable : BackLightStatus var body: some View { switch isKeyboardBackLightAvailable { case .available: Text("Keyboard BackLight is available and started to Flash. ") .padding() .font(.system(size: 16)) case .notAvalable: Text("Keyboard BackLight is not available") .padding() .font(.system(size: 16)) .foregroundColor(.red) case .byDefault: EmptyView() } } }
父视图确认
你的父视图KeyboardBackLightMainView中已经正确通过$isBackLightAvailable传递绑定,这部分无需修改:
NavigationView { keyboardBackLightTestButton() KeyboardBackLightResultView(isKeyboardBackLightAvailable: $isBackLightAvailable) }
额外说明
- @Binding本质是对父视图@State(或其他可绑定源)的引用,其值完全由绑定源控制,子视图仅负责读取和修改,不能自行初始化。
- 若需子视图在无外部绑定时有默认行为,可通过
init方法为Binding提供默认 fallback,但你的代码结构已符合标准父子视图状态传递模式,直接移除默认值即可解决问题。
内容的提问来源于stack exchange,提问作者MD Sazid Hasan Dip
相关产品推荐
相关产品推荐

