You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含嵌套类型的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:40:58