前言 : Swift3.0的Swift的第3个主要版本,目标是安全,快速和有表现力,也是第一个有开源社区参与开发的Swift版本。由于语法和API改动比较多,Xcode 8.0 Beta提供了migrate迁移工具。这样自有的代码升级Swift3.0就比较方便了,但是,关键是要等第三方开源库升级到Swift3.0啊。

那就一起来看看Swift3.0都有哪些改变吧

大家都知道Swift诞生在Objective-C已经发展的相当成熟的情况下,为了保证ObjC开发人员顺利过渡到Swift,也因为Swift处于初级阶段,很多类库和方法命名都尽量和ObjC保持一致,在使用Swift开发iOS应用中处处可以看到ObjC的影子。但是作为一门Modern语言Swift还是做出了改变,从中可以看出日后Swift将彻底摆脱ObjC的影子。这其中包括重新导入Foundation消除类型前缀、方法名去重、函数和方法去C风格等等。

命名的改变

去掉C语言的风格

其它变化

获取屏幕的bounds

在2.3中为:UIScreen.mainScreen().bounds
在3.0中变为:UIScreen.main.bounds

获取屏幕宽度

2.3 : UIScreen.mainScreen().bounds.width
3.0 : UIScreen.main.bounds.width

获取颜色 后面直接跟颜色的单词即可

2.3:  UIColor.orangeColor()
3.0: UIColor.orange

KVC字典转模型方法的改变

2.3 :  setValuesForKeysWithDictionary(dict)
3.0 : setValuesForKeys(dict)

在2.3中的任意对象 AnyObjcet 在3.0中变为 Any

注册cell方法的改变 省略了一个Nib单词 同理注册class的cell 省略class单词

2.3 :   tableView.registerNib(UINib(nibName: "XTLiveTableViewCell", bundle: nil), forCellReuseIdentifier: ID)
3.0 : tableView.register(UINib(nibName: "XTLiveTableViewCell", bundle: nil), forCellReuseIdentifier: ID)

设置字体

2.3 :  UIFont.systemFontOfSize(17)
3.0 : UIFont.systemFont(ofSize: 17)

获取文字宽度

2.3 :  (title! asNSString) .sizeWithAttributes(nameAttr).width
3.0 : (title! asNSString) .size(attributes: nameAttr).width

按钮设置文字 和监听按钮点击方法的改变

2.3 :   btn.setTitle(vc.title, forState: .Normal)
btn.setTitleColor(UIColor.grayColor(), forState: .Normal)
btn.setTitleColor(UIColor.redColor(), forState: .Selected)
btn.addTarget(self, action: #selector(XTBaseViewController.btnClick(_:)), forControlEvents: .TouchUpInside) 3.0 : btn.setTitle(vc.title, for: UIControlState())
btn.setTitleColor(UIColor.gray, for: UIControlState())
btn.setTitleColor(UIColor.red, for: .selected)
btn.addTarget(self, action: #selector(XTBaseViewController.btnClick(_:)), for: .touchUpInside)

动画方法的改变

2.3 :  UIView.animateWithDuration(0.25, animations:{}
3.0 : UIView.animate(withDuration: 0.25, animations: {}

生成cell

2.3 :  let cell = collectionView.dequeueReusableCellWithReuseIdentifier(ID, forIndexPath: indexPath)
3.0 : let cell = collectionView.dequeueReusableCell(withReuseIdentifier: ID, for: indexPath)

在3.0中cell的indexPath的类型(原来为NSIndexPath) 变为IndexPath

在使用的时候要转为NSIndexPath再去使用

2.3 :  func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {}
let vc = childViewControllers[indexPath.row]
3.0 : func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {}
let vc = childViewControllers[(indexPath asNSIndexPath).row]

获取mainBundle方法的改变

2.3 :  NSBundle.mainBundle()
3.0 : Bundle.main

CGPointZero在3.0中改为 CGPointzero

图片的内容模式 .Center 在3.0 中改为 .center

hidden属性在3.0 中改为 isHidden

selected属性在3.0中改为 isSelected

写入文件writeToFile 在3.0中改为write

声明私有的成员变量和方法的关键字 从Private 改为 fileprivate

分页属性的从pagingEnabled 变为 isPagingEnabled

设置URL 从 NSURL(string: string) 变为 URL(string: string)

设置UICollectionView的布局方法

2.3 :  overridefunc prepareLayout() {
super.prepareLayout() }
3.0 : overridefunc prepare() {
super.prepare() }

dismiss掉控制器

2.3 : dismissViewControllerAnimated(false, completion: nil)
3.0 : dismiss(animated: false, completion: nil)

通知方法的改变

2.3 :  NSNotificationCenter.defaultCenter().postNotificationName("loginClick", object: nil)
3.0 : NotificationCenter.default.post(name: Notification.Name(rawValue: "loginClick"), object: nil)

定义枚举 枚举值只能用小写

2.3 :  enum RequestType {
case GET
case POST
}
3.0 : enum RequestType {
case get
case post
}

获取一个控件的最大Y或X值的方法

2.3 :  CGRectGetMaxY((imageView?.frame)!)
3.0 : (imageView?.frame)!.maxY

获取UIApplication方法

2.3 :    //改变状态栏的颜色
UIApplication.sharedApplication().statusBarStyle = .LightContent
3.0 : UIApplication.shared.statusBarStyle = .lightContent

设置形变

2.3 :  loginView.transform = CGAffineTransformMakeScale(0, 0)
3.0 : loginView.transform = CGAffineTransform(scaleX: 0, y: 0)

总结

Swift的每次变化由于对之前的版本乃至上一个版本都不兼容造成每次Swift的升级都显得比较虐心,但是事实上这也是Swift的重大进步。记得之前曾有传闻说Swift3.0的语法和API都会稳定并且向上兼容,但是不久这个消息就破灭了,WWDC上官方也再次证实这个希望可能要到4.0才能实现。但是试想一下:Apple在很短的时间内就固话API对于Swift的发展真的是好事吗?毕竟新特性的加入、更好的语法优化才能让Swift越来越好!总的来说,如果应用要升级到Swift3.0可能要做不同程度的修改,但是这种改动仅仅是语法和SDK的变动并不会消耗太多的工作量,更何况Apple提供了迁移工具。

Swift3.0相对于2.3语法的一些变化的更多相关文章

  1. Swift 3.0 【Swift 3.0 相较于 Swift 2.2 的变化】

    一.编译器和语法变化 函数或方法参数 调用函数或方法时从第一个参数开始就必须指定参数名 在Swift的历史版本中出现过在调用函数时不需要指定任何函数参数(或者从第二个参数开始指定参数名),在调用方法时 ...

  2. Swift3.0语法变化

    写在前面 首先和大家分享一下学习新语法的技巧:用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Syntax- 让Xcod ...

  3. Swift2.3 --> Swift3.0 的变化

    Swift3.0语法变化 首先和大家分享一下学习新语法的技巧: 用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Synt ...

  4. Swift3.0都有哪些变化

    从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行.在W ...

  5. swift学习笔记 - swift3.0用GCD实现计时器

    swift3.0之后,GCD的语法发生了翻天覆地的变化,从过去的c语法变成了点语法,下面是变化之后用GCD实现计时器的方法: 先贴代码: // 定义需要计时的时间 var timeCount = 60 ...

  6. Swift3.0中关于日期类的使用指引

    日期的处理在大大小小的iOS项目中都十分常见,随着Swift3.0正式版的即将推出,语法的改变让NSDate以及相关类的使用都与之前略有不同,这里将会对基于Swift3.0版本的NSDate及相关类的 ...

  7. Swift3.0变化分享

    Swift 3.0 做出的改变很大,在这篇文章中,我将尽我所能,利用代码样例给大家解释Swift 3.0最重要(要命)的改变,希望大家能够做好升级Swift 3.0 的准备.Swift 3.0的改变不 ...

  8. swift3.0变化总结

    Swift 3.0 做出的改变很大,在这篇文章中,我将尽我所能,利用代码样例给大家解释Swift 3.0最重要(要命)的改变,希望大家能够做好升级Swift 3.0 的准备.Swift 3.0的改变不 ...

  9. 关于for循环------swift3.0

    在程序开发当中,for循环使用的频率无疑是最高的.常用的swift循环是递增式遍历.当然各种循环,swift都能办到.但其大多采用关键字形式实现,大部分开发者更喜欢直接使用C式循环代码.在swift3 ...

随机推荐

  1. bjfu1238 卡特兰数取余

    题目就是指定n,求卡特兰数Ca(n)%m.求卡特兰数有递推公式.通项公式和近似公式三种,因为要取余,所以近似公式直接无法使用,递推公式我简单试了一下,TLE.所以只能从通项公式入手. Ca(n) = ...

  2. IOS init initWith 等相关集中

    1.initWithCoder    当一个view从nib初始化的时候,会调用这个函数.  用keyedArchiver序列化一个类的实力,后面用keyedUnArchiver拿回来的时候会调用到 ...

  3. 修改Zabbix默认运行账户

    默认Zabbix运行的账户是Zabbix,但在自动部署的时候,Agent与Server的先后顺序不定,而且官方不建议两者使用同一个账户.   所以,解压压缩包后,进入目录: vi configure ...

  4. <转>亲手缔造DNS体系,创建DNS私有根:DNS系列之六

    打造DNS私有根 我们现在已经从前面的博文中了解到了很多DNS的相关知识,今天我们用一个综合性的实验把前面的内容都串起来复习一下,这个有趣的实验就是DNS的私有根.私有根顾名思义是由个人或企业自行创建 ...

  5. hive 传递变量的两种方式

    在使用hive开发数据分析代码时,经常会遇到需要改变运行参数的情况,比如select语句中对日期字段值的设定,可能不同时间想要看不同日期的数据,这就需要能动态改变日期的值.如果开发量较大.参数多的话, ...

  6. PHP 调用外部程序的几种方式

    /* php 调用python 的代码 // 第一种: // echo passthru('C:/Python34/PY.exe D:/do.py'); // 第二种: // echo exec('C ...

  7. Spark系列(五)Master主备切换机制

    Spark Master主备切换主要有两种机制,之中是基于文件系统,一种是基于Zookeeper.基于文件系统的主备切换机制需要在Active Master挂掉后手动切换到Standby Master ...

  8. Configure the handler mapping priority in Spring MVC

    Often times, you may mix use of multiple handler mappings strategy in Spring MVC development. For ex ...

  9. #elif

    http://baike.sogou.com/v72031124.htm?fromTitle=%23elif #else指令用于某个#if指令之后,当前面的#if指令的条件不为真时,就编译#else后 ...

  10. Mysql常见报错解决方法

    一:登录报错 ERROR 1045 (28000): Access denied for user 'mysql'@'localhost' (using password: NO) mysql日志文件 ...