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 相关问题整理

  • Difference between @available and #available in swift 2.0: @available 和 #available
    帖子里面还提到一个问题:@available是编译期间判断的吗?而#available是运行时行为吗

Swift语言中的@available 和 #available相关推荐

  1. ​Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数

    ​Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数 7.4.4  为外部参数设置默认值 开发者也可以对外部参数设置默认值.这时,调用的时候,也可以省略参数传递本文选自Swift ...

  2. Swift语言中如何使用JSON数据教程

    原文:Swift语言中如何使用JSON数据教程 这是一篇翻译文章,原文出处:http://www.raywenderlich.com/82706/working-with-json-in-swift- ...

  3. 在 Swift 语言中更好的处理 JSON 数据:SwiftyJSON

    SwiftyJSON能够让在Swift语言中更加简便处理JSON数据. With SwiftyJSON all you have to do is: ? 1 2 3 4 let json = JSON ...

  4. Swift语言中的#ifdef替换

    本文翻译自:#ifdef replacement in the Swift language In C/C++/Objective-C you can define a macro using com ...

  5. Swift语言中的控制语句和函数

    前面说了swift的语法不专门来讲,因为专门学语法会感觉比较无聊,所以就穿插来讲,在讲界面和效果一段时间,又讲一下语法,这样或许会好点. 这里就来讲Swift中的控制语句和函数. 控制语句 控制语句是 ...

  6. Swift语言中的感叹号是什么意思?

    本文翻译自:What does an exclamation mark mean in the Swift language? The Swift Programming Language guide ...

  7. Swift语言与Objective-C语言混合编程

    首先创建一个Swift的Single View工程 然后直接在工程中新建OC文件: 然后选择OC语言之后会问你是否自动创建OC和Swift的中间文件: 然后工程文件夹里就有了三个文件: 现在OC头文件 ...

  8. Swift语言快速入门

    Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 201 ...

  9. 苹果新的编程语言 Swift 语言进阶(一)--综述

    Swift 是苹果开发和提供的供开发IOS 和OS X应用的一门新的语言.Swift语言基于C 和Objective-C语言,除了提供C 和Objective-C语言具有的所有语法功能外,为了编程方便 ...

  10. Swift语言高速入门

    Swift语言高速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 201 ...

最新文章

  1. flask学习笔记之blueprint
  2. Android 监听 WiFi 开关状态
  3. Groovy里使用CountDownLatch
  4. Javascript创建对象的几种方式?
  5. LeetCode 2092. 找出知晓秘密的所有专家(并查集)
  6. numpy 归一化_NumPy 数据归一化、可视化
  7. Photo Sphere Viewer 全景图
  8. Python项目实践:文本词频统计、软文的诗词风
  9. 分享10款常用的jQuery焦点图插件
  10. 精通CSS:高级Web标准解决方案(中文电子书下载)
  11. 如何显示或隐藏Mac电脑右上角的声音图标
  12. 19款国产手机无一幸免:15分钟破解人脸识别!
  13. android开发用什么字体,移动端web app和页面开发使用什么字体?微软雅黑?
  14. 【服务器托管单线、双线以及多线如何区别】
  15. 遇见CUBA CLI
  16. 各个开发工具格式化代码的快捷键
  17. 开机黑屏,硬盘灯不亮,没有自检画面,进不去bios
  18. android背景图拉伸,解决android:background背景图片被拉伸问题
  19. Linux查看进程信息相关(Ubuntu)
  20. java记事本的撤回_对于记事本,怎样恢复刚刚撤销的?

热门文章

  1. 7-3 A-B 本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。
  2. 华为网络设备-NAT实验
  3. 1068. Find More Coins (30)搜索题
  4. [内附完整源码和文档] 基于Java的人事档案管理系统
  5. C++使用curl下载文件(post请求)
  6. 机器学习考试 ppt
  7. 湛江景点旅游攻略!究竟有哪些你不容错过的景点?
  8. 吉木萨尔县文化旅游策划案——天山圣地,武侠之都!
  9. 随机出题 c语言编程,在Excel中制作单机版随机出题考试系统
  10. 【转】Windows Error code (Windows错误码说明)