Swift检查API的有效性

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
查看查看122 回复回复1 收藏收藏 分享淘帖 转播转播 分享分享 微信
查看: 122|回复: 1
收起左侧

Swift检查API的有效性

[复制链接]
女汉子 发表于 2016-8-22 04:40:09 | 显示全部楼层 |阅读模式
快来登录
获取优质的苹果资讯内容
收藏热门的iOS等技术干货
拷贝下载Swift Demo源代码
订阅梳理好了的知识点专辑

我们在Swift开发中,为了适配不同的系统版本,我们必须要对API的兼容性做处理。因此这里总结一下在Swift开发中对API有效性的常用判断方式。

说明:本文中的Swift开发语言是基于Swift2.1语法的,若旧版本不支持,请参考相关文章。

Swift检查API的有效性

Swift检查API的有效性 - 敏捷大拇指 - Swift检查API的有效性





1、ObjC检查方式

方式一:通过获取iOS版本,然后判断是否是某个版本范围。如:

[Swift] 纯文本查看 复制代码
if ([UIDevice currentDevice].systemVersion.intValue >= 8) {
  // 调用8.0以后才支持的API
}


方式二:通过条件编译的方式判断是否是某个系统版本之上。如:

[Swift] 纯文本查看 复制代码
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0
     // 调用7.0以后才支持的API
#endif


方式三:通过-respondsToSelector:方法来判断。如:

[Swift] 纯文本查看 复制代码
if (self respondsToSelector:@selector(testAPI)) {
  // 调用
  [self testAPI];
}


是否还有更多方式呢?一时想不出来了,如果还有别的方式,请联系我,谢谢!




2、Swift检查方式

Swift2.0中,我们可以通过#available来判断是否可用。看看其语法如何:

语法规则:#available(iOS v, OSX v1, *),其中参数不要求全部使用,可以直接使用#available(iOS v, *)或者#availabel(OSX, *)

方式一:我们仍然可以使用respondsToSelector方法来判断。如:

[Swift] 纯文本查看 复制代码
if tableView.respondsToSelector(Selector("reloadData")) {
   print("support reloadData")
}


注意:Selector类型与Objective-C中的不同,不会自动提示。

方式二:使用@available方式检查。如:

[Swift] 纯文本查看 复制代码
let interfaceOrientation : UIInterfaceOrientation        
if #available(iOS 8.0, *) {
    interfaceOrientation = UIInterfaceOrientation.Portrait
} else {
    interfaceOrientation = rootController.interfaceOrientation
}


如果是iOS8.0及其以上版本,就会执行第一个分支,否则执行else分支。

下面看看我们封装的一个显示alertview的API:

[Swift] 纯文本查看 复制代码
if #available(iOS 8.0, *) {
 
 // prevent show too many times
 guard let _ = sg_hyb_alert_actionsheet_controller else {
   return
 }
 
 let alertController = UIAlertController(title: title, message: message, preferredStyle: preferredStyle)
 
 if let actions = alertActions {
   for alertAction in actions {
     alertController.addAction(alertAction)
   }
 }
 
 sg_hyb_alert_actionsheet_controller = alertController
 self.presentViewController(alertController, animated: true, completion: nil)
} else {
  UIAlertView(title: title, message: message, delegate: nil, cancelButtonTitle: ok).show() } 


这是因为在iOS8.0以后,有UIAlertController类,更简单地完成显示alert或者actionSheet。




3、提供版本限制

要为Swift的api设置系统版本要求,我们可以通过以下方式:

[Swift] 纯文本查看 复制代码
@available(iOS 9.0, *)
func checkAvailable() {
 let store = EKStock()
 // ...
}


上面的API前面添加了 @available(iOS 9.0, *) ,就要求iOS9.0才能有效。因此在编译时会检查出来是否满足,如果不满足就会产生编译错误,如:

[Swift] 纯文本查看 复制代码
‘checkAvailable’ is only available on iOS 9.0 or newer





4、小结

本篇博文是笔者在学习Swift 2.1的过程中记录下来的,可能有些翻译不到位,还请指出。另外,所有例子都是笔者练习写的,若有不合理之处,还望指出。

学习一门语言最好的方法不是看万遍书,而是动手操作、动手练习。如果大家喜欢,可以关注哦,尽量2-3天整理一篇Swift 2.1的文章。这里所写的是基础知识,如果您已经是大神,还请绕路!




作者:huangyibiao

都看到这里了,就把这篇资料推荐给您的好朋友吧,让他们也感受一下。

回帖是一种美德,也是对楼主发帖的尊重和支持。

*声明:敏捷大拇指是全球最大的Swift开发者社区、苹果粉丝家园、智能移动门户,所载内容仅限于传递更多最新信息,并不意味赞同其观点或证实其描述;内容仅供参考,并非绝对正确的建议。本站不对上述信息的真实性、合法性、完整性做出保证;转载请注明来源并加上本站链接,敏捷大拇指将保留所有法律权益。如有疑问或建议,邮件至marketing@swifthumb.com

*联系:微信公众平台:“swifthumb” / 腾讯微博:@swifthumb / 新浪微博:@swifthumb / 官方QQ一群:343549891(满) / 官方QQ二群:245285613 ,需要报上用户名才会被同意进群,请先注册敏捷大拇指

嗯,不错!期待更多好内容,支持一把:
支持敏捷大拇指,用支付宝支付10.24元 支持敏捷大拇指,用微信支付10.24元

评分

参与人数 1金钱 +10 贡献 +10 专家分 +10 收起 理由
Anewczs + 10 + 10 + 10 32个赞!专家给力!

查看全部评分

swifter 发表于 2016-8-22 18:46:49 | 显示全部楼层
@available方式要重复写一些逻辑啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

做任务,领红包。
我要发帖

分享扩散

都看到这里了,就把这资料推荐给您的好朋友吧,让他们也感受一下。
您的每一位朋友访问此永久链接后,您都将获得相应的金钱积分奖励
关闭

站长推荐 上一条 /3 下一条

热门推荐

合作伙伴

Swift小苹果

  • 北京治世天下科技有限公司
  • ©2014-2016 敏捷大拇指
  • 京ICP备14029482号
  • Powered by Discuz! X3.1 Licensed
  • swifthumb Wechat Code
  •   
快速回复 返回顶部 返回列表