swift 中的 @available

作者: 冰霜海胆 | 来源:发表于2017-04-06 16:49 被阅读1079次

    @available: 可用来标识计算属性、函数、类、协议、结构体、枚举等类型的生命周期。(依赖于特定的平台版本 或 Swift 版本)

    available 特性经常与参数列表一同出现,该参数列表至少有两个特性参数,参数之间由逗号分隔。这些参数由以下这些平台名字中的一个起头:

    • iOS
    • iOSApplicationExtension
    • macOS
    • macOSApplicationExtension
    • watchOS
    • watchOSApplicationExtension
    • tvOS
    • tvOSApplicationExtension
    • swift

    可以用一个星号(*)来表示上面提到的所有平台。

    @available(*, deprecated, message: "Objective-C garbage collection is no longer supported")
    open func finalize()
    

    其中参数如下:

    • unavailable:表示该声明在指定的平台上是无效的。
    • introduced:表示指定平台从哪一版本开始引入该声明。格式如下:
    introduced: 版本号
    
    • deprecated:表示指定平台从哪一版本开始弃用该声明。虽然被弃用,但是依然使用的话也是没有问题的。格式如下:若省略版本号,则表示目前弃用,同时可直接省略冒号。
    deprecated: 版本号
    
    • obsoleted:表示指定平台从哪一版本开始废弃该声明。当一个声明被废弃后,它就从平台中移除,不能再被使用。格式如下:
    obsoleted: 版本号
    
    • message:说明信息。当使用被弃用或者被废弃的声明时,编译器会抛出警告或错误信息。格式如下:
    message: "说明信息"
    
    • renamed:新的声明名称信息。当使用旧声明时,编译器会报错提示修改为新名字。格式如下:
    renamed: "新的声明名称"
    
    • 如果 available 特性除了平台名称参数外,只指定了一个 introduced 参数,那么可以使用以下简写语法代替:
    @available(平台名称 版本号, *)
    

    举例:

    // 存储属性是不能够使用 @available 的!!!
    @available(iOS 7.0, *) ❌
    var property: String?
    
    // 计算属性可以使用 @available
    let number1 = 1
    let number2 = 2
        
    @available(iOS 7.0, *) ✅
    var sum: Int {
          get {
              return number1 + number2
          }
    }
    
    
    // 结构体
    @available(iOS 7.0, *)
    struct MyStruct { }
    
    // 枚举
    @available(iOS 7.0, *)
    enum MyEnum { }
    
    // 协议
    @available(iOS 7.0, *)
    protocol MyProtocol { }
    
    // 类
    @available(iOS 7.0, *)
    class MyClass { }
    

    @available(iOS, introduced: 7.0, deprecated: 10.0, message: "Please Use newFunction instead")
    func oldFunction() { }
          
    func newFunction() { }
    

    相关文章

      网友评论

      • 狗狗臭鸡蛋:xcode9/ios11调用方法:
        if (@available(iOS 11.0, *)) {}
        会crash吗
        冰霜海胆:@狗狗臭鸡蛋 OC :
        if (@available(iOS 11.0, *)) {

        } else {
        // Fallback on earlier versions
        }
        狗狗臭鸡蛋:@冰霜海胆 swift下的吧,ios呢
        冰霜海胆:if #available(iOS 11, *) {

        }

      本文标题:swift 中的 @available

      本文链接:https://www.haomeiwen.com/subject/oehxattx.html