61
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SwiftとObjective-C連携 with Xcode

Last updated at Posted at 2018-10-31

環境

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ライブラリーのモジュール化

参照

61
48
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
61
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?