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

如何在@available(iOS 15.0, *)声明中为存储属性添加低版本兼容实现?

解决方案

你可以通过计算属性封装内部版本分支的方式实现需求,规避属性声明层不支持if @available的限制,同时保持外部调用接口不变,完整实现代码如下:

class SelectableButtonItem: UIBarButtonItem {
    // 供iOS 14及更低版本使用的私有存储属性
    private var _legacyIsSelected: Bool = false
    
    // 全版本通用的对外访问属性
    var isSelected: Bool {
        get {
            if #available(iOS 15.0, *) {
                return super.isSelected
            } else {
                return _legacyIsSelected
            }
        }
        set {
            if #available(iOS 15.0, *) {
                super.isSelected = newValue
            } else {
                _legacyIsSelected = newValue
            }
            // 原didSet中的自定义逻辑统一放在此处执行,全版本生效
            // ... some custom action
        }
    }
}

实现说明

  • 低版本的存储属性标记为私有,避免外部误访问
  • 版本判断逻辑放在计算属性的get/set内部,语法完全合法
  • 自定义逻辑统一维护,不需要分别写高低版本两套实现
  • 外部调用方式和原有逻辑完全一致,不需要修改业务层代码

内容的提问来源于stack exchange,提问作者Denis Bystruev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:45:03