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 |
|