随着Xcode6.3正式版本的推出,Swift语言也正式进入1.2版本,那么1.2版本有什么新特性呢?来快速了解一下吧。
1.速度的提升
速度的提升首先体现在对工程中增量的单独编译,这使得我们在改动较大的工程的时候,运行速度会得到大幅度的提升。
其次体现在Swift自己的运行库的运行时性的增强。Swift刚推出时自己的库运行速度不够快,现在在这个方面做了大幅度的提升。
2.可选绑定的简化
之前在Swift和OC的对比中我们讲过了Swift中的可选绑定,也就是常用的if - let结构,来看看之前的例子:
if let stock = findStockCode("Apple") { if let sharePrice = stock.price { let totalCost = sharePrice * 100 println(totalCost) } }
如果有多个可选绑定,那么需要纵深地来写,也就说我们在不停地嵌套这些if let,看起来很复杂,括号过多容易出错,在1.2版本中优化了这个结构,我们可以把所有的if let写在一句中:
if let stock =findStockCode("Apple"),let sharePrice = stock.price{ let totalCost = sharePrice * 100 println(totalCost) }
我们只需要写第一句判断语句if,之后的let语句可以用,分隔并排来写,这样只需要一对大括号{},语法简洁了不少。
3. as用法的改动
如果你之前在1.1版本编过工程,那么当1.2版本更新的时候工程里的报错可能会吓你一跳,别担心,大部分都是由于as用法的改动。
请看图:
如果我们有一个myTableView1它是一个UIView把它转成NSObject的话是向上转型,那么我们使用as就可以。
如果要向下转型,我们确定它是UITableView类型的,那么我们可以使用as!来转型,这叫强制下转。如果我不确信myTableView1是什么类型的,它可能是一个UITableview也可能是一个UIButton,那么向下转型时我需要使用as?,这叫安全下转。
4.Swift原生集合类型Set
接触过数学的话我们肯定对集合不会陌生,集合和数组的区别是数组中可以有重复的元素,但是集合中不会有重复的元素。之前在Swift中是没有Set这个数据类型的,我们只能使用OC中的NSSet,现在Swift中有原生的集合类型Set了。
5.常量的延迟加载
我们知道Swift中要求类初始化时类的所有属性必须被初始化,变量可以有懒加载,现在常量也有了延迟加载机制:
let 饿:Bool if 吃过饭了 { 饿 = false } else { 饿 = true }
我们定义了一个常量但是没有赋值,我们可以在使用它之前给它赋值。
6.与OC桥接的变化
Swift与OC的互动和桥接还在衍生中。
首先是可选类型的互通,在OC中有一个关键字叫nonnull(非空),比如OC中的nonnull NSString在Swift中就是String,同理OC中的nullable NSString在Swift中就是String?
第三种是未确定是否为空,null_unspecified NSString对应Swift中的String!
以上是可选类型的互通,其次是桥接的变动,现在Swift中不再接受NSString和String的互通了,我们在Swift中逐渐淘汰NSString的使用。
7.迁移助手
那么在Swift版本升级之后如何快速升级我们自己的程序呢?Xcode中新增了迁移助手,可以帮助我们升级我们程序的版本:
具体位置如图:
大家可以试一下。