说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Xcode 6.3 Beta发布,Swift 1.2带来哪些新变化?

HTML文档下载 WORD文档下载 PDF文档下载
苹果发布Xcode 6.3 Beta,更新Swift语言至1.2版本,修改OC语法,进一步提升Swift与OC代码交互性,其代码迁移工具可以帮助开发者实现代码升级。本文作者王芳杰在第一时间对Release Notes进行了完整翻译。

北京时间2月10日,苹果在面向开发者推送iOS 8.3 Beta的同时,还发布了版本号为6D520o的Xcode 6.3 Beta,其中便包含了iOS 8.3 Beta和OS X v10.10 SDK,并进一步提升了Swift与Objective-C代码的交互性,而Swift业已更新至1.2版本。


Xcode 6.3 Beta Release Notes看出,Xcode 6.3 Beta包含了很多颇为值得开发者期待的改变,共计50多处改动,同时修改了Objective-C的语法,足见苹果对Swift语言的重视。而其代码迁移工具可以帮助开发者将其代码从Swift 1.1(Xcode 6.1)升级至Swift 1.2(Xcode 6.3),具体执行编辑菜单(Edit)->转换(Convert)-至(To)Swift1.2即可。 具体更新如下:

Swift语言的增强

  • Swift现在支持目标增量编译,例如当一个文件改变时不会重新编译Target中的每一个文件。这个基于固有依赖分析。所以你依然会看到有很多文件在必要情况下被重编。如果你发现需要重编但没有重编的情况,请报一个Bug出来。清理Target后再编,会按照往常的流程进行。
  • 增加了一个新的Set数据类型,它提供了元素唯一化,且有完整语义的通用数据类型集合。它和NSSet类型桥接,提供和Array和Dictionary相类似的功能。
  • if let语句现在被扩展为可以支持多条条件判断:

if let a = foo(), b = bar() where a < b,let c = baz() { }

它允许你测试多种选择,并且包含一个bool判断。当然这种情况不包含嵌套判断。

  • let常量现在生成时不需要立即初始化,新的规则是let常量必须在被首次使用前初始化即可(和var一样)。或者说它只能被初始化,也就是说在初始化后它不能再被改变或者重新赋值,可用的模式如下:

let x: SomeThing if condition { x = foo() } else { x = bar() } use(x)

这个正常的来说需要var变量用法,尽管这里没有任何修改的操作。

  • "Static"静态方法和属性现在允许在class中使用(作为“class final”的别名)。你现在可以在类中声明一个静态存储属性,它享有全局存储空间和首次使用再初始化的惰性构造功能。协议Protocal现在会声明一个static的类型要求而不是声明一个class的要求。
  • 对于表达式闭包的类型引用有了几点改进:

  1. 含有单返回语句的闭包现在类型检查时以单表达式闭包处理。
  2. 匿名的且含有非空返回类型的单表达式现在可以用在Void上下文中。
  3. 多表达式的闭包类型的情况可能无法被类型推断出来,这归功于缺乏返回类型的情况能被正确的推断出来。

  • Swift中的枚举类型现在可以通过@objc关键字导出到Objective-C中。@objc的枚举类型必须定义一个整型的原始类型,并且该枚举不能泛型化或者不能使用关联值。由于Objective-C中的枚举类型没有命名空间,所以导出到Objective-C中的枚举类型以枚举名字和case项目名字的组合的方式使用。 比如在Swift中的声明:

@objc enum Bear: Int { case Black, Grizzly, Polar }<br>

导出到Objective-C:

 typedef NS_ENUM(NSInteger, Bear) { BearBlack, BearGrizzly, BearPolar };

  • Objective-C语言的扩展语法现在可以判断出Objective-C API中指针或者block的是否为空,同时允许不带ImplicitlyUnwrappedOptional协议地导出Objective-C API函数。
  • Swift现在可以部分支持导入C的联合类型,包括unions、bitfileds、SIMD vector类型以及其他Swift的不支持的C特性。这些不被支持的元素不能在Swift中的直接访问,但是在Swift中,Objective-C或者C可以以参数或者返回类型的方式使用。这包括Foundation NSDecimal类型、GLKit GLKVector和GLKMatrix类型,以及其他一些类型。
  • 被导入的C结构体现在在Swift中有一个默认的构造器,它会将结构体中的所有的元素初始化为0,例如:

import Darwin var devNullStat = stat() stat("/dev/null", &devNullStat)

如果一个结构体的元素不能被正确的初始化为0(比如被标记为新的_nonnull标示符时),这个默认的构造器将会终止。

  • String的索引类型间新的转换API现在可以用了,如String、String.UnicodeScalarView、String.UTF16View以及String.UTF8View, 同时每个String View转换为String的函数也可使用。
  • 类型值在println函数或者字符串内插算法中现在可以打印完整的类型名称了:

toString(Int.self) // 打印 “Swift.Int" println([Float].self) // 打印 "Swift.Array<Swift.Float>” println((Int, String).self) // 打印 "(Swift.Int, Swift.String)"

  • 一个新的“@noescape”属性可以用在函数的闭包参数上,这意味着这个参数是唯一可被调用的(或者用在函数调用时以参数的方式出现),其意思是它的生命周期比函数调用的周期短,这有助于一些小小的性能优化,但最重要的是它屏蔽了闭包中对self.的需求。这使得函数的控制流比其他更加透明。在未来的beta版本中,标准库函数将普遍采用这种特性,比如autoreleasepool():

func autoreleasepool(@noescape code: () -> ()) {   pushAutoreleasePool()   code()   popAutoreleasePool() }

  • 相比Swift 1.1,Swift 1.2在很多方面的性能上有本质的提高,比如多维数组算法更快,未优化的代码更加快速。
  • 表达式类型的错误诊断有了很大的提高。
  • 很多通用表达式的检查效率有很大提高,这个有助于降低编译时间和减少“expression too complex”的错误。
VB通用数据表格输出程序的设计 VB网格中输入数据 VB应用程序中打印条形码的两种方法 VB与Windows资源管理器互拷文件 VB中DOS文件名与长文件名的转换 VB中的Unicode 和 Ansi 格式 VB中如何实现文本查找功能 VB中自制文件搜索器 Windows 初始化文件的修改 -VB资料 Word 97与WPS97的完美结合 -VB资料 比较两个文件-VB资料 采用递归算法删除带有多级子目录的目录-VB资料 菜单项的动态装入 -VB资料 处理加了密码的MDB文件-VB资料 VB创建临时文件 从公共对话框控件中提取多个文件名称 -VB资料 从全路径名中提取文件名 -VB资料 打印MsChart之类的控件 -VB资料 谈谈在VB6.0中如何使用资源文件进行编程 动画图像分解在VB动画设计中的应用 多重文档界面设计方法-VB资料 恢复回收站中的文件 -VB资料 VB获得位图文件的信息 VB获得文本框中光标所在行的内容 VB获取程序工作路径的方法 VB获取文件或文件夹属性 基于VB的通用折行打印程序 基于VB和EXCEL的报表设计及打印 VB建立多级目录 -VB资料 VB建立快捷方式-VB资料 VB建立文件关联 -VB资料 如何学好C语言? 请教各位高手,在我的word2k中,怎么敲空格键显示的却是一个小黑点,但是预览和打印却还是空格? 小弟求助,是大侠的进来看看!!!!! 想打印出类似project2002的进度图,怎么办 ###########window.showModalDialog执行严重出错,请看..... 我的redhat8+adsl能上网,请问局域网用户怎么上网呀(NAT) 急用!!!!!!!!!!!!!!!!!!!! 高手进!! 现在开培训班,如果运行office2002,autocad之类的软件,需要什么样的机器配置? 如何用让RadioButtonlist的text显示图片? 散分有什么好处? 我装了LINUX后不能安装windows2000了???? 菜鸟问题 如何让Foxmail显示所有邮箱中的邮件?! 解决的这个问题,你要什么给什么,在线等 求助朋友,好人, 我的作业要交,请您帮忙,真的很急 怎么样学好c++ DBGrid滚动条拉动问题 如何合并两个图像处理的程序!! 9.9 阅读理解 (Unit 5) 求一C程序:当前目录下最新(最后)创建的文件的文件名,并将其赋给char fname[ ]. 关于数据库设计的问题(觅高手!) 有没有人用 Symantec Enterprise Firewall With VPN 7.0,给个cdkey啦 怎样才能用ado.net把数据库中一个select语句的结果,逐个显示出来。 而不用任何绑定。 有关悬浮的工具栏窗体问题,没人知道啊 第一次接触汇编CASL,请问SP,(SP),((SP))的区别?如将SP换成其他变量或寄存器是否一样? 網絡問題? 共享访问的问题 请问众高手一个语句的写法,谢谢! 大新闻:Microsoft.MSDN.Library.October.2003-TBE(3CD)出了!!!有人可以找到吗?? 请问如何设置诺顿个人防火墙的作为网关上网? 请问一下大家,大家在背mcse、ccna等考试的题库时有什么方法背最好呀,或则是用什么办法作弊最好呀? 如何通过VB向EXCEL模板写入数据? 一个运行时间错误!!! 在linux下使用highpoint的hpt372芯片做raid1,有做成功的朋友吗? WEB数据库 请问oracle的ORACLE_HOME环境变量怎么设置? 多态问题! 在游标中,如何跳出本次循环,执行下一次循环?我用的是sybase数据库 关于ShellExecute的简单问题,会的朋友都来看看啊 请问:一个简单的表单数据传送问题 如何用php获得一个表单里面的值? 100分在线紧急求救进程调度和内存分配程序,分不够再加,操作系统原理高手请进 这几天忙,提前祝中秋快乐! 高分求助win2k和SQL server 关于安全与数据备份的解决方案 在游标中,如何跳出本次循环,执行下一次循环?我用的是sybase数据库 一直没有搞清楚的问题(关于字节对齐):求助大侠---》》》》先谢了 大家好才是真的好,有个好网你一定要知道 问:物流管理信息系统与物流信息系统有什么区别! ==好的网络发文系统,应该具备哪些功能?== PHP小问题,望指教! 怎么安装grub? 屋顶花园的排水沟一般多宽?挡风墙一般多高?有没有什么具体规范?最大日降水量为200mm. 欧洲各国的搜索引擎如何使用? 20世纪30年代欧洲四大国关系的基本态势怎样?(举例说明) (我会用数学)那题 1,如果a:b=5:4,那么4a=【 】2,如果x分之7=y分之1,那么x:y=【 】:【 】3,如果a:b=1又4分之3,那么a×【 】=b×【 】4,如果9a=7b,那么b分之a=【 】5,如果甲数的2分之1等于乙数的6分之5,那么乙数:甲 包罗万() 早上那题数学圆Cx^2+(y-1)^2=1和直线L:Y=-1,由圆C外一点P(a,b)向引一条切线PQ,切点为Q,并且满足|PQ|等于点P到直线L的距离.1、求a,b的关系式【我求完了,是a^=4b+1】2、设M为C上一点,求线段PM长的最 包罗的近义词 小河的鱼用什么样的鱼饵?一般都是鲤鱼多的小河里,怎样打窝? 礼尚往来是什么意思啊? 中国的礼尚往来有什么特别含义 德媒曝美国10年前已监听默克尔通讯 老鹰用摄像机监视绵羊:德街头画讽美监我海军在西太平洋实兵演习遭外国舰机跟国际新闻早报:黎巴嫩北部教派冲突持续安倍称为世界作贡献途径之一是在亚洲抗“乱世”面前,马尔代夫总统宣布休假一非正式出口民调:执政联盟候选人胜出格德媒:美国十年前已窃听默克尔电话法律专家紧急解读:格总统选举后并非改伊拉克发生连环爆炸案 造成至少61人叙问题特使将抵达叙利亚 筹备日内瓦国傅莹:未发现全国人大代表存在外籍或双商洛开启教育实践活动“第一课”补强精陕西佛坪县人大表彰优秀代表建议河北人工增雨添“虎将” 北斗定位飞机河北省交管局提醒:进京车辆安检证可就江苏苏州东山镇组织侨务干部培训 提高邯郸4岁烧伤男孩段振平烧伤:全城联动加强监管,让“便民手机”用的更放心还需从制度上治治“吃空饷”这张嘴全国政协十二届二次会议开幕独家图表:俄乌两国军力对比民国老兵志怪谈异大航海之科技夺宝重生纣王玩转封神逆天作弊器之超级项链网游之盛唐诡异再生之地狱游戏异将回到三国当保镖海鹰网游三国之生死葵花老祖香草世界旅游天河公园旅游阳春巷旅游蠡湖公园旅游渔父岛旅游指云寺旅游澜沧江大峡谷旅游雾浓顶观景台旅游尼西汤堆村旅游香格里雄古景区旅游飞水谷旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘