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

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”的错误。
隐藏Win95任务栏 -VB资料 VB用API函数打开 MS CommonDialog对话框 VB用MSGBOX函数设计版权信息: 用VB5 制作“闪烁标题栏”窗体 用VB5.0获取正在系统中运行的窗口标题 用VB实现浮动按钮 用VB5实现窗口图象缩放、滚动技巧 用VB6建立带光栅的超级开始菜单 用VB尝试新的界面风格 用VB建立字符界面的控制台程序 用VB快速读取TextBox第N行的数据 用VB 设计VCD播放器 用VB设计更好的用户界面 用VB设计聚焦框程序 用VB实现“ICQ”式的启动欢迎画面 用VB实现全屏幕图形界面及动态功能提示 用VB实现任务栏右下角的小图标 用VB制作常居上层的浮动工具箱 用VB制作即时动态按钮 用VB作浮动式图标提示按钮 用Visual Basic编写托盘程序 用Visual Basic窗体背景花纹的实现 用Visual Basic设计窗体背景花纹 用Visual Basic设计更好的用户界面 用Visual Basic设计三维图形按钮 用VisualBasic制作半透明窗体 运行时改变控件大小的两种方法-VB资料 运行中隐藏/显示窗口标题栏-VB资料 在ListBox适当设定水平滚动条的宽度-VB资料 在VB中利用API实现窗体的平滑显示 在vb中让控件大小和位置随着表单的大小成比例变化的方法 我想做钱能编的《C++程序设计》习题集的网站! 怎样可以得到当前window对应于屏幕的坐标呢 请问在vs.net编写aspx时,怎样才能在写.时,后面的属性或方法能出来 能告诉我ORACLE触发器的语法吗? 怎么画不出图来? 如何定一个文件类型的变量? 水晶报表,多列(分栏)打印 如何使安装程序汉化?我使用的是installshield6.2 谢谢! datagrid中的问题:删除datagrid中某行时出现的问题。 使得窗口总是处于最前的函数是什么,谢谢 请教:如何用Sql实现查询本周发的帖子?? 如何用程序设置ie的页面设置中的页眉,页脚,边距和方向? 为什么要学Java http://Scjp.myrice.com 也许你的一切会改变! 请问怎么修改InstallShield中的可选项,如Typical、Compact、Custom等。 如何.定制通用对话框中的路径及文件名? 我照着网站上的中文输入法提示,做了可没效果 为什么要学Java 看 http://Scjp.myrice.com 也许你的一切会改变! 回答问题,我给500分!! 语音聊天用什么软件好?qq,netmeeting,yahoo message or icq? 为什么不能汇编成功? 各位,帮我一下,非赏急! 数据库快照复制问题,总出错,求救!(50分) 请问这是怎么一回事。win2k(p)+tomcat+jdk1.4.` 在VB中怎样设置Excel单元格的样式?如设置为百分数显示单元格数值? 下拉菜单问题? 请问这是怎么一回事。win2k(p)+tomcat+jdk1.4.` 求救,我财务系统的问题,大大们一定要帮助我呀! 我在调试jsp是的一个错误信息,请指教~~~ 急!!! 一个烦人的问题 关于在应用程序中使用dll中资源的问题 關於並行執行的問題 也许你现在就会改变!! 看 http://Scjp.myrice.com 为什么要学Java 其实我们很封闭! 关于NT的小问题! 请问: 請問哪里有c++的書籍下載? 几个控件重叠在一起,怎样用代码的方式使其中的某个控件在运行时放至最上!?谢! 也许你现在就会改变!! 看 http://Scjp.myrice.com 其实我们很封闭! 如何发布我的网站? 怎样编程在Windows开始菜单的的“启动”栏中添加本程序的快捷方式? 谁有installshield 6.30的license注册文件? 请问:DataGrid在WebForm中明明有数据显示,但用浏览器看就没,为何? 显卡选择问题 ? 也许你现在就会改变!! 看http://Scjp.myrice.com 其实我们很封闭! 一个Acme .....???? 共计350分哟。急急。。。。我在PHP区有发言。但是还连不上SQL SERVER2000呀。。请进 boyqing(阿清):我的问题转到这了! 谁有installshield 6.30的license注册文件? 高手请进! 大家用java都来做什么????? 搞linux,unix底层的在中关村有没有搞头? 请问这是什么昆虫或者什么昆虫的幼虫? 什么和什么的器官使昆虫不依靠水的浮力也能支撑身体和运动的器官 幼虫和若虫有什么区别 关于希望情侣之间幸福的句子 不能太矫情的 昆虫的内脏器官的相互联系呼吸系统和循环系统的关系 (紧急)生物中昆虫的"若虫"与"幼虫"的区别? 求情侣诗句!求一4-7句的,情侣名字诗句.男:王超、女:朱向可.请高人指点,又浪漫又经典的 昆虫的器官有哪些组成 手足 这个词语 意思意思! 一个水壶,倒入3杯水重1100千克,倒入5杯水重1500千克,一杯水重多少千克?水壶重多少千克 请问这个是什么昆虫的幼虫求鉴定 照样子,写词语.眉目 手足 _______ ______ ______照样子,写词语.眉目 手足 _______ _____________ 成长的烦恼作文500急! 六年级上册语文21课老人与海鸥 老人为海鸥做了些什么? 灯泡为什么能吸引昆虫 两句有关赞美亲情的诗句或名言 公主很高兴.扩句 用一个杯子向空水壶倒水,如果倒3杯水,连壶重740克:如果倒进5杯水,连壶重980克,每杯水重多少克 给我个作文,一定要自己写,叫《成长的烦恼》600字.快.马上要 “她很快乐” 扩句,扩两处 用一个杯子向空水壶里倒水,如果倒进三杯水,连壶重740克.如果倒进五杯水,连壶重980克.问每杯水重多少克? 不定积分(1/(根号x)(1+x)) dx 不定积分3x^3/(1-x^4) dx定积分-1到2 [1/(11+5x)^3] 定积分1到4 [1/(1+根号x)] 妈妈很高兴(扩句)教教 用一个杯子向空水壶里倒水如果倒进三杯水加壶重740可如果倒进五杯水连壶重980,每杯水多少克 求不定积分:∫x/[根号(3x+1)+根号(2x+1)]dx 五种夏天会鸣叫的昆虫是谁?就说五种夏天会鸣叫的昆虫是谁,别废话!去你的!刘困困,是别的 甲乙两杯分别有水20克,25克,甲杯放入3克糖,乙杯放入4克糖,哪杯水甜,为什么,请用多种方法比较 求不定积分 ∫ dx/(x-三次根号(3x+2)) 夏天的五种会鸣叫的昆虫鸣声不是很响也不是很轻! 小学六年级上册语文第21课中的老人为什么要喂海鸥? 请问光速除了是可见光的速度,伦琴射线,无线电波,红外线,紫外线的速度是否也是这个值? 5种夏天会鸣叫的昆虫5种 什么是无线电波,微波,红外线,可见光,紫外线,X射光,Y射线 无线电波,红外线,可见光,紫外线,X射线,r射线之间有什么差别? 形容全家在一起吃饭很开心的词语 在可见光、无线电波、γ射线、伦琴射线、紫外线和红外线中,最容易发生衍射的是?粒子性最明显的是?热效应最明显的是? 无线电波、红外线、可见光、紫外线、x射线、γ射线他们的传播速度真的一样吗(丝毫没有偏差)? 今天我很高兴,因为和他在一起.这句话的英文是什么? 无线电波,可见光,红外线,伦琴射线,紫外线的按发生明显衍射现象从易到难该如何排练 紫外线,可见光和红外线三种电磁波在真空中的传播速度最大的是 “认识你们很高兴” 在一起的人说这句话意味着他要离开 在一起很久的朋友,其实是要走了 用一个杯子向一个空水瓶倒水,如果倒进4杯水,连瓶共重520克 无线电波、红外线、紫外线、可见光、X 射线和伽马射线的各自作用列如 红外线的主要功能是热效应 "认识你我很开心,很快乐、跟你在一起让我体会到什么才是真正的人生."这句话英语怎么说? 如何区分幼虫和若虫 什么昆虫把卵寄生到别的昆虫哪里 今天我很开心 几句话 不完全变态幼虫叫做若虫(水生是稚虫),那么若虫什么时候被成为蝻有时候若虫被称为蝻,如蝗虫.那么什么样的若虫被称为蝻? 成长的烦恼 好词好句好段20个词 10个句子 4个段 这是什么昆虫的幼虫? 《七步诗》中用“箕豆同根相煎”比喻“兄弟手足相残”,请再写一句使用比喻表意的诗句 求情侣间很甜蜜的对话,或是句子 这是什么虫子的幼虫 关于表示对手足相残无比痛心的诗句有哪些? 这是什么昆虫的幼虫吗 昆虫胸部有什么和什么运动器官 我们谈到手足相残时,我们用曹植的诗句 哪里有这种情侣甜蜜的句子类似这样的句子.你男朋友的缺点多不多 像星星一样多 那优点呢 像太阳一样少 那你为什么会选择他 因为太阳一出来星星就消失了 ( 节肢动物的运动器官是什么?昆虫呢?鸟的运动器官包括足吗?哺乳动物呢? 幼虫与若虫的区别
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘