SwiftUI:基于枚举返回View时遇不透明返回类型匹配错误
解决SwiftUI返回不同View时的类型不匹配错误
错误原因
你遇到的问题根源有两个:
- 函数声明了不透明返回类型
some View,但分支里返回的CheckOutView和ShippingView是完全不同的底层类型,some View要求所有返回路径的底层类型必须一致。 - 代码存在语法错误:每个View实例后面多了一个多余的右括号(比如
CheckOutView(presenting: presenting))末尾多了个))。
修复方案
方案1:用AnyView擦除类型(最直接)
把每个View包装成AnyView,统一返回类型:
func getDestination(presenting: Binding<Bool>) -> AnyView { switch self { case .checkout: AnyView(CheckOutView(presenting: presenting)) case .shipping: AnyView(ShippingView(presenting: presenting)) } }
方案2:正确使用@ViewBuilder生成统一类型
修复语法错误后,@ViewBuilder会自动把不同View包装成符合View协议的单一类型(ConditionalContent),这样就能用some View正常返回:
@ViewBuilder func getDestination(presenting: Binding<Bool>) -> some View { switch self { case .checkout: CheckOutView(presenting: presenting) case .shipping: ShippingView(presenting: presenting) } }
注意:要确保你的枚举只有.checkout和.shipping两个case,switch分支必须全覆盖,否则会触发编译报错。
内容的提问来源于stack exchange,提问作者tHatpart
相关产品推荐
相关产品推荐

