在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程式碼的樣子發生了變化。
變化前:
1 2 3 4 5 6 7 8 9 10 11 12 |
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 } // ... } |
變化後:
1 2 3 4 5 6 7 8 9 10 11 12 |
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。