春节期间,苹果发布了版本号为6D532l的Xcode 6.3 Beta 2,相较上一版本,此次共有16处改动,而几经修改的Swift语言即使已更新至1.2版本,其语法依然不稳定。除此之外,Xcode还有一个非常大的变化就是全新的Playground。
App Store和Test Flight Crash Logs Oganizer
- Xcode现在可以显示从AppStore和TestFlight收集来的崩溃日志,为了查看你自己App的崩溃日志,先需要你在Xcode的账户面板输入你的开发者账号,最后在Xcode Organizer窗口中查看与你开发者账号相关联的iOS App崩溃报告。
- 崩溃报告只在你向iTunes Connect中上传了当前App的符号信息数据的情况下可见。Xcode提供一个列表来显示你所有App中级别最高的崩溃报告,并且崩溃报是符号化的且和Apple的服务器整合。Xcode同时提供了工作流来管理你的崩溃报告以及直接回溯到你的App源代码。
Xcode Playground增强
- Playgrounds提供了一个简单的方法通过标记文本来创建和编辑富文档。使用新的"//:"和“/*:*/”风格的备注来显示丰富的备注信息。可以通过使用编辑菜单中的“Show Documentation as Rich Text”和“Show Documentation as Raw Text”选项来切换Playground的显示模式。更多的信息,请参考“Playground Markup Format Reference”。
- Playgrounds的结果现在以内联的方式显示而不是显示在Timeline视图中,如果显示结果有多行时,你可以在单行与多行列表中切换。对于结果集是数字的,Xcode提供了一个图形化的显示选项,结果显示可以被调整显示多还是少。更多的信息,请参考“ Exploring and Evaluating Swift Code in a Playground”
- Playground滚动和性能都有所提高。
Swift性能
- 一个被称为“全模块优化”的编译模式增加到了Swift中。这个选项可以把一个Target中的所有文件优化到一起同时提供更好性能。这个新的标志可以通过Xcode中的“Whole Module Optimization”编译选项开启,或者在使用swiftc命令时传入“-whole-module-optimization”参数开启。
Swift语言的增强
- 这个“if-let”语法现在扩展支持以一个bool表达式开头并且跟随一个可选绑定“let”表达式。如:
if someValue > 42 && someOtherThing < 19, let a = getOptionalThing() where a > someValue { }
- 这个@autoclosure属性拥有了第二种形式。@autoclosure(escaping) 和@autoclosure有着同样的调用形式,但是它允许产生结果的闭包在实现中缓存,如:
func lazyAssertion(@autoclosure(escaping) condition: () -> Bool, message: String = "") { lazyAssertions.append(condition) // escapes } lazyAssertion(1 == 2, message: "fail eventually")
Swift语言的改变
- 空合运算符(??)的优先级现在比逻辑运算符和比较运算符高,但是比转换运算符as和区间运算符低。这个提供了非常有用的特性,如:
if allowEmpty || items?.count ?? 0 > 0 {
- “&/”和“&%”运算被移除,这种行为分别使用“/”和“%”代替,不过这种形式已经冗余了。
- 从一个ASCII码构造一个UInt8需要一个ascii关键字。使用一个非ASCII的Unicode字符集将产生一个中断。
- C类型的size_t现在以Int的形式导入到了Swift中,这减少了大量Int和UInt间的显式类型转换,同时和返回Int型的sizeof更好的对齐。
- 没有继承自NSObject的类但是确实继承了一个@objc标志的协议时,则需要给这些方法,属性和构造器用@objc标记从而来满足协议需求。如:
@objc protocol SomethingDelegate { func didSomething() } class MySomethingDelegate : SomethingDelegate { @objc func didSomething() { … } }
作者简介:
王芳杰 老码团队(@未来眼之老码团队)成员,目前就职于叠拓信息技术有限公司,担任叠拓NGN中国人力资源培养经理、叠拓NGN中国售前经理,《老码说编程之玩转Swift江湖》一书作者。