转载

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

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

本文由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

正文到此结束
Loading...