Swift-er SDK:简述OC的Nullability Annotations特性

suiling· 2015-08-20
本文来自 苹果开发者中心 ,作者 suiling

70.jpg

本文由CocoaChina译者 远的风景 翻译自苹果开发者中心
原文:Swift-er SDK


苹果在Xcode 6.3中为Objective-C添加了一项新特性--Nullability Annotations,该特性为Objective-C提供了表达null和non-null API的方法,类似于Swift编程语言中的Optional类型。

通过为Objective-C引入轻量级的泛型模式,Xcode 7继续致力于让Objective-C和Swift之间的通信变得更加自然。泛型使得Objective-C和Swift之间更加安全地理解和共享包含特定类型元素的集合。

这项功能对使用Swift和Objective-C混编的APP非常有用,但是开发者每天还是使用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规则的代码。这些改变源自于改进后的头文件信息。比如,如果你重载一个参数和结果类型更加准确的方法,那么migrator将会在转换的过程中更新方法以便与之进行匹配。

苹果对Objective-C的改善和提升已经在WWDC上详细说明了,可参看视频14:30处Swift and Objective-C Interoperability这一节,不过视频中使用的是Xcode 6.3 __nullable语法,而不是Xcode 7的_Nullable语法。关于Nullability Annotations的更多信息,请查看Nullability and Objective-C这篇文章。更多关于Swift 2 and Objective-C轻量级泛型的内容,请参看Xcode 7 Release Notes

推荐阅读会报编译器警告的Xcode 6.3新特性:Nullability Annotations