BLOG

2015年2月4日/ Objective-C, Swift,

[iOS][Swift] Objective-CプログラムをSwiftから呼び出す方法

こんにちは、iOSエンジニアの佐々木です。

 

最近iOSアプリの開発を本格的にSwiftへ移行していますが、まだObjective-Cのコードを見ることがしばしばあります。
特にライブラリソースの多くはSwiftへの変換がされていないケースがほとんどなので、SwiftとObjective-Cを混在させて開発する必要があります。

 

古いフレームワークの組み込みなどにも必要なテクニックで、今回は基本的な実装方法をご紹介したいと思います!

 

Objective-CプログラムをSwiftから参照する

SwiftとObjective-Cは1つのアプリケーションの中で混在させて利用することができます。
1つのファイルの中に2つの言語を混ぜて記述することはできませんが、コンパイルリンクして1つの実行ファイルを作ることができます。

 

実装の流れとしては、以下の通りです。

  1. Objective-Cソースをプロジェクトに追加
  2. Bridging-Headerの作成
  3. Bridging-Headerにヘッダファイルを読み込み
  4. メソッドの呼び出し

 

Bridging-Headerとは?

サンプルとしてゼロからアプリを作ってみます。
実際の開発において、言語間の連携の部分はどんなアプリでも同じだと思うのでサンプルアプリを参考にして組み込んでみてください。

 

swift project生成

まず空のプロジェクトファイルを作ります。
言語はSwiftベースにしています。

 

ObjectiveCファイルの生成

次にObjectiveCソースを実装します。
どんな方法でもかまいませんので、プロジェクトに組み込んでください。

 

ObjectiveCソースの生成

今回は新規でファイルを作りました。

 

Bridging-Headerの生成

Swiftのみの環境にObjectiveCソースを組み込もうとすると、「Bridging-Header」の生成を聞かれます。
これはSwiftからObjectiveCソースを参照するためのヘッダファイルのようなものです。

 

これがないと言語間で連携することができませんので、「Yes」を選択しファイルを生成します。
(あとからでも生成できます)

 

ObjectiveCソースを作った直後

こちらがObjectiveCファイルを作った直後のプロジェクトです。
あとはヘッダファイルを追加し、プログラムを作っていきます。

 

ObjectiveCプログラム実装後

ヘッダファイルを追加して、入力したデータを2倍にして返却する”culc”というメソッドを作りました。
続いてこちらのメソッドswiftコードで使う方法について解説します。

 

Objective-Cプログラムにアクセスするには?

Bridging-Header使い方

Objective-Cソースを組み込んだところで、次にSwiftへの連携部分を実装していきます。
まず、先ほどObjective-Cファイルを追加した時に生成されたBridging-Headerへ、Objective-Cのヘッダファイルをインポートします。

 

ビルド設定

次にインポートしたファイルを使うための設定を行います。
Build Settings -> Swift Compiler – Code Generation の設定を確認してください。

 

Install Objective-C Compatibility Header“が”Yes“、”Objective-C Bridging Header“が指定のファイルに設定されているかを確認します。

 

SwiftでObjectiveCプログラムを呼び出す

最後にSwiftでObjectiveCプログラムを呼び出すコードを実装します。
このあたりはSwiftでのメソッド呼び出しと同じです。

 

おわりに

以上で、基本的な実装は終わりです。
ヘッダインクルードして使うだけなので簡単ですね。

詳細にいうと、64bitと32bitで受け渡すデータ型が違ったりいろいろあるのですが、詳細は他のサイトなどを参考にしてみてください。

※ Appleの公式サイトでも解説はありますので、詳細が知りたい方はこちらも参考にしてください。
Apple : Using Swift with Cocoa and Objective-C

 

Resent Posts

Category