4月 022015
 
開発のプロが教える Swift標準ガイドブック

Swiftをメインに使うようになり、新規プロジェクトではSwift、そして既存のプロジェクトをObjective-CからSwiftに移行を行っている日々をおくってます。
Swiftを触りすぎてObjective-Cの記述方法を忘れかけているので、たまにObjective-Cのコードを追ったり修正するときに困ってる位です(笑)
Swiftはまだ言語の変更が激しいので、まだ実践で使うには怖いという声も聞きますが、まぁなんとかなるでしょと考えてたりします。「安定してから手を付けよう」なんてもったいないですしね。
Objective-C(ARCの導入とかもろもろ)の変化を乗り越えてきてるので、抵抗が少ないっていうのもあるかもしれません。

Objective-Cで書かれた既存のプロジェクトに、Swiftを使って機能を追加したり徐々にSwiftに置き換えていく場合、重要になってくるのはObjective-CとSwiftの相互利用です。

SwiftでObjective-Cを参照

SwiftからObjective-Cのクラスなどを参照するケースは、プロジェクトの移行の段階で必要不可欠です。
Swiftで使用したいObjective-Cのヘッダをブリッジングヘッダという特別なヘッダファイルに記述することで、Swiftから参照できるようになる仕組みです。
ブリッジングヘッダは、Objective-Cのプロジェクトで初めてSwiftをNew Fileで追加する場合に、作成するか下図のように確認するメッセージが表示され、「YES」で自動作成されます。
7_2
ブリッジングヘッダは、「<プロダクト名>-Bridging-Header.h」のファイル名で作成され、Build Settingsの、「Swift Compiler – Code Generation」の「Objective-C Bridging Header」にはファイルパスが設定されます。
もしブリッジングヘッダを自分で作成する場合には、ファイル作成後にBuild Settingsに追加しておく必要があるので、忘れないよう注意しましょう。
ブリッジングヘッダに使いたいObjective-Cのヘッダを設定した後は、Swift側ではObjective-Cのクラスであることを意識せず使えるようになります。
Objective-Cのクラスを継承することも可能で構造体や列挙体も参照できますが、残念ながらObjective-Cのマクロは参照できません。マクロはSwiftで同等の動作をする関数を作成する必要があります。

Objective-CでSwiftを参照

Objective-CでSwiftのコードを使用するにはかなり制限があります。
たとえばクラスの継承ができなかったり、Swiftで定義した列挙体は参照できなかったりします。他にもObjective-Cには存在しないタプルなどもObjective-C側ではもちろん使用できません。
もうひとつ重要な点は、SwiftのクラスはNSObjectを継承したもの、もしくは@objcと宣言したものである必要があります。
SwiftからObjective-Cを参照するときにはブリッジングヘッダを使いましたが、Objective-CからSwiftを参照するときには、「<プロダクト名>-Swift.h」をimportします。
Swiftのコードを使用することをコンパイラに知らせるための特別な記述で、実際にこのファイルは作成する必要はなく内部的に自動で処理され、Build Settigsにファイルパスを設定する必要もありません。
SwiftからObjective-Cを参照するときに作成したブリッジングヘッダと混乱しがちなので注意しましょう。

ここに書いたことはすべて、著書である「開発のプロが教える Swift標準ガイドブック」に書いてありますので、興味がある方は是非ご購入ください。(宣伝宣伝w)

書籍

Kindle版

Pocket

 Posted by at 11:22 AM

Sorry, the comment form is closed at this time.