转载

苹果官方博客:从SDK详说Swift代码的改变

CSDN移动将持续为您优选移动开发的精华内容,共同探讨移动开发的技术热点话题,涵盖移动应用、开发工具、移动游戏及引擎、智能硬件、物联网等方方面面。如果您想投稿、参与内容翻译工作,或寻求近匠报道,请发送邮件至tangxy#csdn.net(请把#改成@)。 

在Xcode 6.3中,我们为Objective-C添加了新语言特性 nullability注解 。这个特性给Objective-C提供了表达API使用null和non-null统一的方式,相当于Swift语言中的Optional类型。Xcode 7继续为Objective-C与Swift之间更加自然的通信引入轻量级的泛型模型。泛型使得这两种语言能够可靠地融合并分享带有特定类型元素的集合。

这些特性对任何使用Swift和Objective-C这两种语言编程的人来说都比较有用。但应用程序开发人员每天使用的Objective-C代码占更大部分:这就是组成Apple SDK的那些框架。为了提升Swift和Objective-C的使用体验,全公司的范围内,我们在SDK的头文件中都提供了这样的信息。Xcode 7中,你会发现几乎所有常见框架都指定了其API的nullability注解,包括其集合类型的元素。这使得Swift代码的样子发生了变化。

变化前:

class UIView : UIResponder {    init!(frame: CGRect)  var superview: UIView! { get }    var subviews: [AnyObject]! { get }    var window: UIWindow! { get }  // ...  func isDescendantOfView(view: UIView!) -> Bool  func viewWithTag(tag: Int) -> UIView!  // ...  var constraints: [AnyObject]! { get }  // ... }

变化后:

class UIView : UIResponder {    init(frame: CGRect)  var superview: UIView? { get }    var subviews: [UIView] { get }    var window: UIWindow? { get }  // ...  func isDescendantOfView(view: UIView) -> Bool    func viewWithTag(tag: Int) -> UIView?  // ...  var constraints: [NSLayoutConstraint] { get }  // ... }

最后一个疑问是Xcode 7中将代码转换成Swift 2的工具,在Xcode的Edit菜单下,Convert > To Latest Swift Syntax。通过必要的编辑,该工具会将一个使用Swift 1.2编写的项目转换成合法的Swift 2.0代码。这些改变源于改进后的头文件信息。例如,正在重写的一个方法,其参数和结果类型更加精确,方法转换的过程中将会被更新与之匹配。

在今年的WWDC的 Swift and Objective-C Interoperability 视频14:30处,对Objective-C所作的改进做了详尽的描述。注意,该视频使用的是Xcode 6.3中的__nullable语法,并非更新的Xcode 7中用的_Nullable。了解更多nullability注解的信息,可以看看 Nullability and Objective-C 。了解Swift 2.0和Objective-C中轻量级泛型更多信息,可以看看 Xcode 7 Release Notes 。

(翻译/白云鹏 友情审校/汪洋)

原文链接:Apple Developer's Blog

译者简介 白云鹏,移动应用开发者,个人博客: http://baiyunpeng.com/

预告: 2015中国移动开发者大会(MDCC 2015) 将于10月15-16日在北京新云南皇冠假日酒店召开。大会特设五大技术专场:平台与技术iOS、平台与技术Android、产品与设计、游戏开发、企业移动化。此外,大会更是首次举办国内极具权威影响力的IoT技术峰会,特设硬件开发技术与虚拟现实两大专场。大会将聚集国内最具实力的产品技术团队,与开发者一道进行最前沿的探讨与交流。

第一时间掌握最新移动开发相关信息和技术,请关注mobilehub公众微信号(ID: mobilehub)。 

苹果官方博客:从SDK详说Swift代码的改变

正文到此结束
Loading...