SwiftUI中@Binding初始化报错:Cannot infer contextual base in reference to member 'markt'
为什么SwiftUI中@Binding初始化为
.markt会报“Cannot infer contextual base in reference to member 'markt'”错误? @Binding的特性决定了不能直接用枚举简写初始化:
@Binding是用来引用外部状态的属性包装器,它本身不持有值,必须关联父视图的@State、@Published这类状态源。你直接写.markt时,编译器完全不知道这个成员属于哪个枚举类型——此时tappedItem的绑定类型还未明确,没有任何上下文能让编译器推断出.markt对应的枚举。枚举简写需要明确的上下文支撑:只有当编译器能从周围代码确定枚举类型时,才能用
.markt这种简写形式。比如给@State属性赋值时,因为@State持有值、类型明确,.markt能被正常推断;但@Binding不行,它依赖外部传值来确定类型,自己初始化时不存在这个推断上下文。移除初始化能编译的原因:去掉初始化后,SwiftUI会强制要求父视图在创建子视图时传入一个绑定(比如
$someState),此时父视图的状态类型会明确tappedItem的绑定类型,编译器自然就能识别.markt属于哪个枚举了。
举个直观的代码对比:
// 错误示例:无上下文,编译器无法识别.markt的所属枚举 struct BrokenView: View { @Binding var tappedItem: MyEnum = .markt // 触发报错 var body: some View { Text("Demo") } } // 正确示例:由父视图传入绑定,明确类型 struct FixedView: View { @Binding var tappedItem: MyEnum var body: some View { Text("Demo") } } // 父视图中使用 struct ParentView: View { @State private var selected = MyEnum.markt var body: some View { FixedView(tappedItem: $selected) } }
内容的提问来源于stack exchange,提问作者softshipper
相关产品推荐
相关产品推荐

