Xcode6.3和Swift1.2都已经发布。这次发布增强了Swift编译器也给Swift增加了一些新的特性。详细内容可以看这里。这里主要关注比较重要的内容。

编译器的改进

Swift1.2的编译器更加的稳定,各方面性能都有所提升。这些改进让使用Swift开发体验更好。某些可见的更新包括:

  • 增量编译-没有修改的文件默认情况下不会再编译。这会大幅提升编译时间。大范围的代码调整还是会引发多文件的重新编译。
  • 更快速的可执行文件-debug模式下生成的二进制文件将显著提升运行速度。新的优化也会提升release模式下生成的二进制文件的性能。
  • 更好的编译诊断-更好的错误和警告信息,更好的“fix-it”提示。这些都会帮助你写出更好的Swift1.2代码。
  • 更加稳定-常见的编译器崩溃已经修正。你也不会经常看到SourceKit警告了。

新的语言特性

Swift1.2有更好的安全和可预见行为。Swift和Objective-C交互也改进。主要改进如下:

  • as!类型转换符-类型转换在运行时是可能失败的。现在用as!操作符,让读代码的或者代码的维护者更加清楚的知道潜在的运行时转换失败。

Objective-C增加了可空标记-新的Objective-C标记允许你在头文件中标记指针或者block是否可空。当你混合使用OC和Swift的时候,你可以写出和Swift融合更好的OC代码。如:

-(void)registerNib:(nonnull UINib *)nib forCellReuseIdentifier:(nonnull NSString *)identifier;
-(nullable UITableViewCell *)cellForRowAtIndexPath:(nonnull NSIndexPath)indexPath;
@property (nonatomic, readwrite, retain, nullable) UIView *backgroundView;

在Swift中会变成:

func registerNib(nib: UINib, forCellReuseIdentifier identifier: String)
func cellForRowAtIndexPath(indexPath: NSIndexPath) -> UITableViewCell?
var backgroundView: UIView?

以前一般会作为implicitly-unwrapped optionals 隐式解析可选(如,UINib!) 方式引入Swift代码中。现在有了可空标记,nonnull标记的将不再使用感叹号操作符。nullable标记的会作为optional类型,如上面的UITableViewCell返回值引入Swift后成为UITableViewCell?

  • Swift枚举可以使用@objc属性暴露给Objective-C-比如下面的代码:
@objc enum Bear: Int {
case Black, Grizzly, Polar
}

导入OC后为:

typedef NS_ENUM(NSInteger, Bear) {
BearBlack, BearGrizzly, BearPolar
};
  • let常量更加强大、一致:let常量不再要求立即初始化。新规则是一个let常量必须在使用前初始化,而且只可以被初始化。不能重新复制或者改变。所以let表达式可以写成这样:
let x: SomeThing
if condition {
x = foo()
} else {
x = bar() }
use(x)
  • 更加强大的if let可选解析-if let一次可以解析多个optional。同时可以包含bool条件。这样可以有效的避免无效的嵌套。如:
if let a = foo(), b = bar() where a < b,
let c = baz() {
}
  • 新的本地数据结构Set-一个无序、唯一数据集类型Set,对应于OC的NSSet。

结论

Swift1.2无论在语言上还是在相关的工具上都是迈出了很大一步。当然这些变化中也包含了一些代码不兼容的内容。所以在Xcode6.3中包含了一个迁移器来自动完成代码迁移。可以打开Xcode->Edit->Converter ->To Swift 1.2来使用迁移器。

参考:https://developer.apple.com/swift/blog/?id=22

Swift1.2与Xcode6.3 beta的更多相关文章

  1. Swift 版本历史记录(关注)

    http://numbbbbb.gitbooks.io/-the-swift-programming-language-/content/chapter1/03_revision_history.ht ...

  2. 苹果WatchKit轻松入门

    背景 前段时间苹果Apple推出 WatchKit,用于开发Apple Watch应用,同时也推出了 Xcode6.2 Beta(非稳定版,好期待稳定版)版本用于开发 Watch App.Apple ...

  3. iOS版本、iPhone版本、Xcode版本比对

    iOS版本 iPhone版本 Xcode版本 其他 2003年 Xcode1.0 2005年4月29日 Xcode2.0 2007年1月9日 iPhone OS(iOS1): 虚拟键盘.谷歌地图 第一 ...

  4. xcode6 beta 中智能提示(自动完成)功能有时不显示的问题

    xcode6 beta 中智能提示(自动完成)功能有时不显示的问题      周银辉 xcode6 beta 中智能提示(自动完成)功能有时不显示,这让人很郁闷啊,网上老外的视频中看人家用的好好的. ...

  5. 安装xcode6 beta 后调试出现Unable to boot the iOS Simulator以及编译苹果官方Swift的demo报错failed with exit code 1的解决的方法

    苹果昨天公布新语言Swift(雨燕),须要安装xcode6 以及mac os 系统为10.9以上. (xcode6 beta 可在官方下载.须要登录开发人员账号:mac os 系统直接更新就可以.在此 ...

  6. iOS: XCode6 beta 6 错误

    在使用XCode6 Beta6时, 遇到"__TFSs15_arrayForceCastU___FGSaQ__GSaQ0__"错误: 在http://stackoverflow.c ...

  7. xcode 6.4模拟器出现多个相同版本:OSX Yosemite 上安装xcode7 beta和xcode6.4

    错误现象是:我在OSX Yosemite上同时安装了Xcode 7Beta和Xcode 6.4,然后Xcode 6.4的模拟器出现了重复版本.截图如下: 解决方法是: 删除该路径下的所有文件:~/Li ...

  8. Xcode6 storyboard new push segue 后的视图控制器没有navigation item bug.

    手动切一下 老的push,再切回来,就会出有了,我想是一个bug. Xcode 6 Segue with UINavigationItem up vote0down votefavorite   I' ...

  9. ios 模拟器不显示系统版本了,后边都是 uuid 了,怎么弄回来?系统升级xcode6.4,模拟器找不到选择了?

    当我用El Capitan Beta 下 Xcode6.4版本时候出现了问题 常用的Scheme 选择版本不见了 而在Xcode 7.0 beta 6中显示有 简直就是坑,经过查资料其实是一个bug ...

随机推荐

  1. mongodb基础学习13-聚集aggregate操作

    aggregate可以用的操作与sql的对应关系 下面来看具体操作例子: 分组求和: 求总记录数 商品价格大于50记录分组求和 商品价格大于50且分组记录大于2的分组记录条件 分组库存数,并按库存排序 ...

  2. Maven的配置以及IDEA导入本地Maven

    1.首先看你的电脑jdk的环境变量是否配成功 2.Maven的下载地址:http://maven.apache.org/download.cgi 3.下载完成后解压到你要安装的目录,我的是直接放在D: ...

  3. homework 补第三题

    上次只写了两道题 发现少了一道 所以今天补上    4 . 另外补上今天的程序代码 代码 1. 2. 3 4 运行截图 1. 2 3

  4. PHP与apache配置

    在apache 的安装路径中找到 \conf\httpd.conf文件 在 LoadModule最后面添加如下代码: PHPIniDir "D:\PHP"LoadModule ph ...

  5. 4、注解反射生成SQL语句

    .任务说明         ①有一张用户表,字段包括:用户ID.用户名.昵称.年龄.性别.所在城市.邮箱.手机号:         ②使用java注解来对用户表的每个字段或字段的组合条件进行动态生成S ...

  6. ubuntu部署jenkins

    https://www.cnblogs.com/lozz/p/9962316.html 1.安装 wget -q -O - https://pkg.jenkins.io/debian/jenkins- ...

  7. 用NBU无法还原数据库到ASM磁盘

    描述:用NBU无法还原数据库到ASM磁盘,却可以还原到数据库本地磁盘 错误提示: ORA-15025: could not open disk "/dev/mapper/DATA1" ...

  8. flush(), clear(), save()的简单解释

    hibernate最新发布包的javadoc里对这三个方法的解释是: clear() :Completely clear the session.清空session,该清空操作只对于要保存的.删除的和 ...

  9. 奇偶数判断2(if else+switch语句)

    public class 奇偶数判断2 { public static void main(String [] agrs){ float s = 17f; //定义浮点型数据s float h = s ...

  10. poj1611(并查集简单应用)

    题目链接:http://poj.org/problem?id=1611 思路: 显然是一个并查集的题,很简单,只要将一个group中的学生并在一起,最后遍历1到n-1,看有多少学生的祖先与0的祖先相等 ...