環境
Xcode 9.3
書いたこと
- SwiftからObjective-Cコードを呼び出す方法
- Objective-CからSwiftコードを呼び出す方法
SwiftからObjective-Cコードを呼び出す方法
流れ
-
Build Settings
を設定 -
Bridging-Header.h
の追加 - Swiftから呼び出すファイルを2で追加したブリッジングヘッダーにimportする
1. Build Settings を設定
Packaging の Define Modules 項目を true にする。
2. Bridging-Headerの追加
新規ファイルの追加から Objective-C
ソースファイルを追加するとダイアログが表示されるので、 Create Bridging Header ボタンを押下。
Build Settings で Bridging-Headerに、 <ProjectName>-Bridging-Header.h ファイルが指定されていることを確認する。
3. Bridging-Headerにインポート
// Swiftから呼び出すObjファイルをimportする
#import "Foo.h"
Objective-CからSwiftを呼び出す方法
流れ
-
Build Settings
を設定 - Swift APIを呼び出す .m ファイルで <Product_Module_Name>-Swift.h ファイルを import する
1. Build Settings を設定
Packaging の Define Modules 項目を true にする。
2. <Product_Module_Name>-Swift.h ファイルを import する
Product Module Name
は、 ※Build Settings* で確認できる。
// モジュール名がObjcCallSwiftの場合 (以下のファイルは自動的に生成される)
#import "ObjcCallSwift-Swift.h"
NOTE: 英数字以外の文字が使われている場合は、 その部分をアンダースコアに置き換える。
//モジュール名が Swift-Objcの場合
#import "Swift_Objc-Swift.h"
まとめ
タイトルで With Xcode とした理由は、 \<ProjectModuleName\>-Bridging-Header.h
や \<ProjectName\>-Swift.h
は、あくまでもXcodeを介した機能であるため。
Xcodeを介さない場合は、それぞれモジュール化してimportする方法がある。
以下を参照してください。
[swift] Cライブラリーのモジュール化
参照
- How can I import Swift code to Objective-C?
- How do i call swift function from objective c file in same project? [duplicate]
- Importing Project-Swift.h into a Objective-C class…file not found
- [Qiita]どーーーしても、Objective-CからSwiftのインスタンスをいじりたい場合に気をつけること
-
[Qiita]Swiftのattributeまとめ[Swift4対応]#@objcMembers
※ タプルはobjにならない。