每周 Swift 社区问答:@available 和 #available

Swift 2.0 中,引入了可用性的概念。对于函数,类,协议等,可以使用@available声明这些类型的生命周期依赖于特定的平台和操作系统版本。而#available用在判断语句中(if, guard, while等),在不同的平台上做不同的逻辑。

@available

用法

@available放在函数(方法),类或者协议前面。表明这些类型适用的平台和操作系统。看下面一个例子:

@available(iOS 9, *)
func myMethod() {
    // do something
}

@available(iOS 9, *)必须包含至少2个特性参数,其中iOS 9表示必须在 iOS 9 版本以上才可用。如果你部署的平台包括 iOS 8 , 在调用此方法后,编译器会报错。
另外一个特性参数:星号(*),表示包含了所有平台,目前有以下几个平台:

  • iOS
  • iOSApplicationExtension
  • OSX
  • OSXApplicationExtension
  • watchOS
  • watchOSApplicationExtension
  • tvOS
  • tvOSApplicationExtension

一般来讲,如果没有特殊的情况,都使用*表示全平台。

@available(iOS 9, *)是一种简写形式。全写形式是@available(iOS, introduced=9.0)introduced=9.0参数表示指定平台(iOS)从 9.0 开始引入该声明。为什么可以采用简写形式呢?当只有introduced这样一种参数时,就可以简写成以上简写形式。同理:@available(iOS 8.0, OSX 10.10, *) 这样也是可以的。表示同时在多个平台上(iOS 8.0 及其以上;OSX 10.10及其以上)的可用性。

另外,@available还有其他一些参数可以使用,分别是:

  • deprecated=版本号:从指定平台某个版本开始过期该声明
  • obsoleted=版本号:从指定平台某个版本开始废弃(注意弃用的区别,deprecated是还可以继续使用,只不过是不推荐了,obsoleted是调用就会编译错误)该声明
  • message=信息内容:给出一些附加信息
  • unavailable:指定平台上是无效的
  • renamed=新名字:重命名声明

以上参数具体可以参考官方文档

#available

#available 用在条件语句代码块中,判断不同的平台下,做不同的逻辑处理,比如:

if #available(iOS 8, *) {
        // iOS 8 及其以上系统运行
}


guard #available(iOS 8, *) else {
    return //iOS 8 以下系统就直接返回
}

stackoverflow 相关问题整理

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,269评论 4 61
  • 练习 39:SQL 创建 原文:Exercise 39: Creating with SQL 译者:飞龙 协议:C...
    布客飞龙阅读 559评论 0 2
  • 文/傲娇哇 早上,杨小北风风火火的在群里发出了求救信号,我们都以为她发生了什么大事儿,原来是她打开微信,发现前男友...
    傲娇哇阅读 7,900评论 185 121
  • 补听了昨天张老师的课,才知道冥想并不仅仅可以调节气息,修养身体,它还可以是成为了解心灵的一个入口。我的冥想体验还没...
    飞鸿踏泥阅读 203评论 0 0
  • 借力微信,小程序的应用已经初露端倪。未来发展方向在哪里?可以断言微信就是将来的操作系统,而小程序就是操作系统下的应...
    张戴伟霖阅读 192评论 0 1