含嵌套类型的Preview宏添加可用性检查编译失败,求替代方案
可行替代方案:将可用性标注应用到内部嵌套的View结构体
问题的核心原因是:当你给#Preview宏本身添加@available时,编译器会错误地要求内部嵌套的View结构体在低版本系统中也需可用,但实际上该View仅需和#Preview一样,只在iOS17+环境下存在。
解决方法很简单——把@available标注直接加在内部嵌套的View结构体上,而非#Preview宏:
#Preview { @available(iOS 17.0, *) struct LocalTogglePreview: View { @State private var isOn: Bool = true var body: some View { Toggle( isOn: $isOn, label: EmptyView.init ) .labelsHidden() } } return LocalTogglePreview() }
也可以利用Swift闭包的隐式返回特性简化代码:
#Preview { @available(iOS 17.0, *) struct Preview: View { @State private var isOn = true var body: some View { Toggle(isOn: $isOn, label: EmptyView.init).labelsHidden() } } Preview() }
这种方式既保留了代码的内聚性(无需在文件外部定义额外结构体),又能满足可用性检查的要求,避免编译错误。
内容的提问来源于stack exchange,提问作者Vakho
相关产品推荐
相关产品推荐

