よりSwfitらしいSDK

LINEで送る
Pocket

アップルSDKがSwfit-er SDKとなったとPRしています。
「よりSwiftらしい」ということなんでしょうね。
SwiftとObjective-Cがますます相互利用しやすくなっています。

To improve the experience of working with Swift and with Objective-C, we made a company-wide effort to provide this information in our SDK headers. Swift blog

よりSwfitらしいSDK

Xcode6.3ではObjective-Cにnullabilityアノテーションが言語仕様として加わりました。この仕様のおかげで、SwiftではOptionalが提供する同じ種類のNULLと非NULLのAPI群をObjective-Cで表現できるようになりました。Xcode7ではObjective-Cに軽量なジェネリクスモデルを導入することで、Objective-CとSwiftとの間の連携がより自然にできるようになっています。ジェネリクスがあると2つの言語間で特定の要素を含む集合を安全に解釈でき共有できるようになります。

これらの機能はSwifとObjective-Cの両方のコードを含むアプリケーションを書く人にとってはとても便利です。アプリケーション開発者が毎日使うかなり大きなObjective-Cのコレクションがあります。アップルSDKを構成するフレームワークです。SwiftやObjective-Cの使用体験をよりよくするために、SDKのヘッダーでこの情報を提供する全社的な取り組みを行ってきました。Xcode7ではよく使うフレームワークのほとんどすべてでAPIのnullability(NULLを許可するか)と集合の要素の型を特定できるようになっていることに気づくでしょう。

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 }

	// ...
}

上記のコードからSwfitのインターフェースをとると、以下のようになります。

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 }

	// ...
}

パズルの最後のピースはあなたのコードをSwfit2に変換するXcode7のツールです。このツールはXcode内のEditメニューのConvert > To Latest Swift Syntaxにあります。Swfit1.2を使用しているプロジェクトでこのツールを使うと、今あるコードを有効なSwift2のコードに変換するのに必要な変更をしてくれます。この変更ではヘッダー情報も改善してくれます。例えば、パラメータと結果の型をより具体化したメソッドをオーバーライドしている場合でも、移行ツールはそのメソッドをあうように修正してくれるでしょう。

Objective-Cへの改良は14:30から始まるWWDCのSwiftとObjective-Cの相互運用性について詳しく解説されています。ビデオではXcode6.3の__nullableシンタックスと比較してXcode7で更新されたシンタックスである_Nullableを使用していることに気づいてください。nullabilityアノテーションの詳細については、NullabilityとObjective−Cの記事が参考になります。Swfit2とObjective-Cの軽量ジェネリクスについてさらに詳しく知りたい場合はXcode7リリースノートを参照してください。

LINEで送る
Pocket

コメントを残す