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

如何在非函数体内为变量使用#available(iOS 16.0, *)?

解决iOS版本低于15.0时不编译requestReview环境变量的问题

因为#available是运行时版本检查指令,无法直接用于控制变量的编译与否,你需要用Swift的条件编译指令实现编译时的版本控制:

方案一:条件编译控制变量声明

直接通过#if指令判断iOS版本,只在iOS 15.0及以上版本编译requestReview环境变量:

struct HomeView11labs: View {
    // 仅在iOS 15.0及以上编译该环境变量
    #if os(iOS) && iOS >= 150000
    @Environment(\.requestReview) var requestReview: RequestReviewAction
    #endif
    
    var body: some View {
        VStack {
            Button("申请评价") {
                // 使用变量时同样要加条件编译,避免低版本报错
                #if os(iOS) && iOS >= 150000
                requestReview()
                #endif
            }
        }
    }
}

注:iOS版本号在条件编译中需用整数格式,比如15.0对应150000,16.1对应160100。

方案二:可选类型兼容(非编译时剔除)

若不需要完全剔除代码,仅需避免低版本运行错误,可将变量声明为可选类型,结合#available在运行时判断调用:

struct HomeView11labs: View {
    @Environment(\.requestReview) var requestReview: RequestReviewAction?
    
    var body: some View {
        Button("申请评价") {
            if #available(iOS 15.0, *) {
                requestReview?()
            }
        }
    }
}

这种方式会在所有版本编译变量,但低版本中变量值为nil,通过运行时检查避免调用错误。

内容的提问来源于stack exchange,提问作者Nat Serrano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:37:22