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 ...
随机推荐
- 跨越数据库操作时注意要加dbo
跨越数据库操作时注意要加dbo insert into hrdb.dbo.TB_B_PROJECTS :这样是正确的 insert into hrdb.TB_B_PROJECTS :这样是错误的
- C#整合VS2010和NUnit
软件下载 .Net单元测试工具 NUnit下载:http://www.nunit.org/index.php?p=download,最新的为NUnit-2.6.0.12051.msi,下载安装. VS ...
- spring 整合 hibernate xml配置
spring 整合 hibernate: hibernate :对数据库交互 spring: ioc aop 整合点: 1.sessionFactory对象不再由hibernate生成,交由spr ...
- js 删除节点,jquery遍历通过内容定位节点
$(".class1 .class2").each(function (index, item) { var gettedValue = $(item).find(".c ...
- linux安装本地blast
1)wget ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/2.8.0alpha/ncbi-blast-2.8.0-alpha+-x64-li ...
- Saving Tang Monk II(bfs+优先队列)
Saving Tang Monk II https://hihocoder.com/problemset/problem/1828 时间限制:1000ms 单点时限:1000ms 内存限制:256MB ...
- TZOJ 4839 麦森数(模拟快速幂)
描述 形如2^P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2^P-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它有9 ...
- httpClient 连接池问题出现403.9
困扰了半个月时间终于找到连接池的问题,由于调用第三方有异常导致连接不能及时释放 所以写了一个定时扫描释放连接 监控连接池释放连接: public static class IdleConnection ...
- Repeater嵌套Repeater
<asp:Repeater ID="rptXiaoLei" runat="server" OnItemDataBound="rptXiaoLei ...
- vue-awesome-swiper插件
http://www.cnblogs.com/songrimin/p/6905136.html 这个地址不错 在上一些我的demo代码 第一步安装 npm install vue-awesome-sw ...