订阅移动开发RSS CSDN首页> 移动开发

苹果继续改改改!Swift语言何时能稳定?

发表于2015-03-06 15:01| 次阅读| 来源未来眼之老码团队| 0 条评论| 作者王芳杰

摘要:相隔两周,苹果发布Xcode 6.3 Beta 2更新,相较上一版本,共计16处改动,增强Playground性能,支持在Playground中使用Markdown语法写注释文档。而几经修改的Swift语言即使已更新至1.2版本,其语法依然非常不稳定。

春节期间,苹果发布了版本号为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的显示模式。


  • Playgrounds的结果现在以内联的方式显示而不是显示在Timeline视图中,如果显示结果有多行时,你可以在单行与多行列表中切换。对于结果集是数字的,Xcode提供了一个图形化的显示选项,结果显示可以被调整显示多还是少。
  • 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江湖》一书作者。

(责编/唐小引)

0
0
  • CSDN官方微信
  • 扫描二维码,向CSDN吐槽
  • 微信号:CSDNnews
程序员移动端订阅下载

微博关注

相关热门文章