警告功能(官方称之可用性检查),主要用来帮助你找到App中的Bug。因为只有调用系统真正支持的API才安全,如果你在旧系统中调用新版本API,那么你的APP很有可能崩溃或其他意外,过去官方建议查询“Objective-C”运行时来确认API是否适用,但这个方法很难进行测试,也很容易出错,而且它需要不同的语法来检查每项全局变量、函数、类实例方法和类方法。如果适用Swift的开发者,可能在想这有什么?Swift有一个统一的语法#available可以在运行时,用于查询API的可用性,而且编译器甚至可以在编译时捕捉缺失的可用性,然而,Xcode9的出现,将弥补这一遗憾。
-
@ available
,Xcode9
将Swift
可用性检查带入了OC
,同步判断当前iOS系统是否满足需求。例如:
假如说你有一个App,你想把它配置回iOS_10
中,并且你决定利用iOS11_Vision
框架中全新的人脸检测API,当你将API添加至你的App并构建时,你会收到一个编译警告,如图:
这个警告告诉你,这些API只适用于iOS_11
或更新的系统中。你可以通过使用新的@available
结构查询API的可用性。
- 我们也可用利用
@ available
来判断当前系统是否满足我们的某些条件:
if (@available(iOS 11, *)) {
NSLog(@"当前设备系统版本 大于等于11.0");
} else if (@available(iOS 10, *)) {
NSLog(@"当前设备系统版本 大于等于10.0");
} else {
NSLog(@"当前设备系统版本 小于10.0");
}
-
API可用性宏
;如果你想编写一个只能在iOS_11或更新的系统上使用的一整套方法,这个时候我们的可用性宏API_AVAILABLE
恰好迎合了你的需求。
(1.) 我们先来定义一个API可用性宏
(2.) 接下来我们在iOS_10
的系统上调用一下我们刚刚定义的接口
-
如果在类之前声明 API_AVAILABLE(ios(11)) 就是对该类添加了系统版本约束
- 针对
runtime 或者 c/c++
方法中,也有对应判断系统版本方法,相似@avalibale
语法__builtin_available
去判断
对类的约束:
小结:苹果鼓励你升级最新版本Xcode,使用最新SDK和操作方法
,但是也不妨碍回归老版本SDK
,这时候@available
方法在编译时候 ,会被忽略不做警告提示。