Swift を Cocoa や Objective-C と一緒に使う方法の覚書です。
なお、Swift で作成したアプリは iOS8 と OS X Yosemite がリリースされた時点で審査に入れるようです。
Using Swift with Cocoa and Objective-C
Basic Setup
Swift から Objective-C API を呼び出すことができる。逆に、Objective-C から Swift のコードを呼び出すこともできる。
Swift と Objective-C のプロジェクトの大きな違いは、Swift にはヘッダーファイルがない。Swift には全ての情報が .swift ファイルに含まれている。
import
Swift でもフレームワークやライブラリを読み込むには import を使う。
1
|
|
Foundation を読み込むことで、NSDate, NSURL, NSMutableData などを含む全ての Foundation API、全てのメソッド、プロパティ、カテゴリを利用出来るようになる。
Objective-C と Swift のマッピング
- Objective-C の型は同等の Swift の型にマッピングされる。
idはAnyObject - Objective-C のコア型は Swift の型にマッピングされる。
NSStringがStringのように - Objective-C のコンセプト機能は同等の Swift のコンセプト機能にマッピングされる。ポインタが Optionals と対応するように
C++ のコードは直接 Swift には取り込めない。代わりに Objective-C か C で作ったラッパーを作り、それを取り込む。
Swift から Objective-C のコードを呼び出す方法
Bridging Header というものを作る。
[Swift] SwiftとObjective-Cで相互に連携する
SwiftでObjective-CのFrameworkを読み込む方法
Interoperability
Initialization
Objective-C の init メソッド、initWith メソッドは、init で切られて With の部分が捨てられる。捨てられて残った部分が第一引数のパラメータ名に対応する。
1
|
|
1
|
|
Objective-C のファクトリメソッドは convenience initializer にマッピングされている。
1
|
|
1
|
|
Methods
Objective-C のメソッド名がそのまま Swift のメソッドになり、第一引数名が省略される。残りの引数名はそのまま残る。
1
|
|
1
|
|
id
Swift ではどんな型も表すタイプとして AnyObject を用意している。Objective-C の id は AnyObject に対応する。
Objective-C のメソッドを呼び出すのに、キャストは必要ない。@objc 属性がメソッドに修飾されているので、そのまま呼び出すことができる。
1 2 |
|
AnyObject から as によるキャストでは、ダウンキャストが成功するかどうかの保証ができない。そのため、if-let 構文を使ってチェックすること。
1 2 3 4 5 |
|
Closure and Block
Objective-C の block は Swift の Closure に対応する。
1
|
|
1
|
|
@objc アノテーション
@objc アノテーションを使うことで、Swift のコードを Objective-C の中から呼び出すことができるようになる。
@IBOutlet、@IBAction、@NSManaged を使うと暗黙的に @objc が付与される。
Swift コードから Objective-C コードへの変換
メソッドはほとんどそのままマッピングされる。init コンストラクタは、第一引数に initWith がつくように変換される。
1 2 |
|
1 2 |
|
Selector
Objective-C のセレクタは Swift では Selector 構造体にマッピングされる。
1
|
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Writing Swift Classes with Objective-C Behavior
Objective-C のプロトコルは Swift の protocol に対応する。Objective-C の NSObject プロトコルは NSObjectProtocol になっている。
Integrating with Interface builder
Swift でも Interface Builder の機能は利用出来る。Outlet、Actions、ライブレンダリングは Swift でも可能。
Swift では @IBOutlet、@IBAction をプロパティやメソッドに付与する。
1 2 3 4 5 6 7 |
|
@IBDesignable と @IBInspectable をつかうと Interface Builder で編集が出来る。
1 2 3 4 5 6 |
|
Working with Cocoa Data Types
String(NSString)、Number(NSNumber)
NSString を利用したい場合は as を使ってキャストする。もしくは、最初から NSString 型を使う。
1 2 3 4 5 6 7 8 |
|
NSNumber も同じ。
1 2 |
|
Array
NSArray は AnyObject[] にマッピングされる。
Foundation Data Types
NSSize、NSPoint はそのまま利用出来る。
1 2 |
|
NSLog
NSLog はそのままの構文で利用出来る。
1
|
|
NSError and Error Reporting
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
