Help us understand the problem. What is going on with this article?

SwiftとObjective-C連携 with Xcode

More than 1 year has passed since last update.

環境

Xcode 9.3

Screen Shot 2018-10-31 at 23.15.26.png

書いたこと

  • SwiftからObjective-Cコードを呼び出す方法
  • Objective-CからSwiftコードを呼び出す方法

SwiftからObjective-Cコードを呼び出す方法

流れ

  1. Build Settings を設定
  2. Bridging-Header.h の追加
  3. Swiftから呼び出すファイルを2で追加したブリッジングヘッダーにimportする

1. Build Settings を設定

PackagingDefine Modules 項目を true にする。

Screen Shot 2018-10-31 at 22.38.00.png

2. Bridging-Headerの追加

新規ファイルの追加から Objective-C ソースファイルを追加するとダイアログが表示されるので、 Create Bridging Header ボタンを押下。

Screen Shot 2018-10-31 at 22.41.22.png

Build Settings で Bridging-Headerに、 <ProjectName>-Bridging-Header.h ファイルが指定されていることを確認する。

Screen Shot 2018-10-31 at 22.46.17.png

3. Bridging-Headerにインポート

SwiftCallObjc-Bridging-Header.h
// Swiftから呼び出すObjファイルをimportする
#import "Foo.h"

Objective-CからSwiftを呼び出す方法

流れ

  1. Build Settings を設定
  2. Swift APIを呼び出す .m ファイルで <Product_Module_Name>-Swift.h ファイルを import する

1. Build Settings を設定

PackagingDefine Modules 項目を true にする。

2. <Product_Module_Name>-Swift.h ファイルを import する

Product Module Name は、 ※Build Settings* で確認できる。

Foo.m
// モジュール名がObjcCallSwiftの場合 (以下のファイルは自動的に生成される)
#import "ObjcCallSwift-Swift.h"

NOTE: 英数字以外の文字が使われている場合は、 その部分をアンダースコアに置き換える。

Foo.m
//モジュール名が Swift-Objcの場合
#import "Swift_Objc-Swift.h"

まとめ

タイトルで With Xcode とした理由は、 \<ProjectModuleName\>-Bridging-Header.h\<ProjectName\>-Swift.h は、あくまでもXcodeを介した機能であるため。
Xcodeを介さない場合は、それぞれモジュール化してimportする方法がある。
以下を参照してください。
[swift] Cライブラリーのモジュール化

参照

ysn
はてな https://yossan.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away