Swift1.2与Xcode6.3 beta
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的更多相关文章
- Swift 版本历史记录(关注)
http://numbbbbb.gitbooks.io/-the-swift-programming-language-/content/chapter1/03_revision_history.ht ...
- 苹果WatchKit轻松入门
背景 前段时间苹果Apple推出 WatchKit,用于开发Apple Watch应用,同时也推出了 Xcode6.2 Beta(非稳定版,好期待稳定版)版本用于开发 Watch App.Apple ...
- iOS版本、iPhone版本、Xcode版本比对
iOS版本 iPhone版本 Xcode版本 其他 2003年 Xcode1.0 2005年4月29日 Xcode2.0 2007年1月9日 iPhone OS(iOS1): 虚拟键盘.谷歌地图 第一 ...
- xcode6 beta 中智能提示(自动完成)功能有时不显示的问题
xcode6 beta 中智能提示(自动完成)功能有时不显示的问题 周银辉 xcode6 beta 中智能提示(自动完成)功能有时不显示,这让人很郁闷啊,网上老外的视频中看人家用的好好的. ...
- 安装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 系统直接更新就可以.在此 ...
- iOS: XCode6 beta 6 错误
在使用XCode6 Beta6时, 遇到"__TFSs15_arrayForceCastU___FGSaQ__GSaQ0__"错误: 在http://stackoverflow.c ...
- xcode 6.4模拟器出现多个相同版本:OSX Yosemite 上安装xcode7 beta和xcode6.4
错误现象是:我在OSX Yosemite上同时安装了Xcode 7Beta和Xcode 6.4,然后Xcode 6.4的模拟器出现了重复版本.截图如下: 解决方法是: 删除该路径下的所有文件:~/Li ...
- Xcode6 storyboard new push segue 后的视图控制器没有navigation item bug.
手动切一下 老的push,再切回来,就会出有了,我想是一个bug. Xcode 6 Segue with UINavigationItem up vote0down votefavorite I' ...
- ios 模拟器不显示系统版本了,后边都是 uuid 了,怎么弄回来?系统升级xcode6.4,模拟器找不到选择了?
当我用El Capitan Beta 下 Xcode6.4版本时候出现了问题 常用的Scheme 选择版本不见了 而在Xcode 7.0 beta 6中显示有 简直就是坑,经过查资料其实是一个bug ...
随机推荐
- ubuntu16.04安装tensorflow-gpu和cuda8.0加速训练
转载请注明出处:http://www.cnblogs.com/buxizhizhoum/p/8086230.html 环境: 系统:ubuntu 16.04 cpu:i5 gpu:gt920m mem ...
- OPTION SQL_SELECT_LIMIT=DEFAULT'
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version ...
- Scripting API Samples
Scripting API Samples Tomáš Matoušek edited this page on Jan 31 · 32 revisions Home API Changes Bu ...
- Nunit与Vs 2012配合使用
要使用Nunit首先要去官网 http://www.nunit.org/ 下载Nunit.win .msi是安装版. bin .zip是绿色版. 下载完后安装. 在 VS2012 中使用 Nu ...
- get与load方法
get()与load()的共同点:根据id加载对象get()与load()的区别:get():若加载的对象不存在,则返回nullload():若加载的对象不存在,则抛出异常
- SpringMVC中在web.xml中添加中文过滤器的写法
<filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>or ...
- Spring依赖注入:基于xml配置
基础接口 BeanFactory.ApplicationContext. BeanFactory用于创建并管理.获取各种类的对象. ApplicationContext从BeanFactory派生而来 ...
- The Doors(几何+最短路,好题)
The Doors http://poj.org/problem?id=1556 Time Limit: 1000MS Memory Limit: 10000K Total Submissions ...
- 粘性Service
粘性Service就是一种服务 把他删去他又会马上创建 原理是在这个服务中去开启线程不断检测此服务是否存在如果不存在,咋就会重新创建 import android.app.Activity; impo ...
- 【D3D】Direct3D中LPRECT(上左右底)和LPoint(x,y)之前转换
D3DSprite.cpp void CD3DSprite::DrawText(CD3DFont *pFont, char *szString, RECT &DesRect, D3DCOLOR ...