SwiftからC++を使う
言語仕様上SwiftからC++を使うには、Objective-Cppを使用して接続するしかない。
しかし、シンプルに使うことできる。
まずは、プロジェクトにこれを作る
HeaderFile
${プロジェクト名}-Bridging-Header.h
MEMO
プロジェクトに.cのファイルを作成しようとするとXcodeが自動生成してくれるので簡単。仮に自動じゃなくても、ヘッダーファイルを作って、ここにファイルパスを追加すれば良い。
Xcode
Build Settings > Swift Compiler - General > Objective-C Bridging Header
例えばこんな感じ。
Path
${PROJECT_DIR}/path/to/$(SWIFT_MODULE_NAME)-Bridging-Header.h
あとは、設定したヘッダーファイルに、使いたいC++をラップしたObjCppのヘッダーファイルをインポートするだけ。
例えばこんな感じ。
Objective-C
#import "hoge.h"
以上の方法を踏めば、簡単にSwiftからC++のクラスやメソッドを呼び出せる。
Objective-C/C++からSwiftを使う
使うユーザも少ない(ほぼいない)し、これを紹介している文献も少ない。
Xcodeの機能で、Swiftとのインターフェイスを自動生成する機能があるためそれを使う。
まずは、Inferface Header Nameが設定されていることを確認する。
具体的にはここに$(SWIFT_MODULE_NAME)-Swift.h
が設定されていることを確認する。
Path
Build Settings > Swift Compiler - General > Objective-C Generated Interface Header Name
ファイル自体は自動的に生成されるので、そのままこれを入力すれば良い。
Path
$(SWIFT_MODULE_NAME)-Swift.h
プロジェクトのビルドが成功すると、ここに自動的にInferfaceができるらしい。
あとは、使うObjective-C/C++の.m
もしくは.mm
にこのヘッダーファイルをインポートする
例えばこんな感じ。
Objective-C/C++
#import "path/to/Hoge-Swift.h"
これでSwiftのClassが使えるようになる。
注意
Objective-C上で使えるSwiftのクラスはNSObjectを継承しているクラスのみで、かつ@objcMembersと明示する必要がある。例えばこんな感じ。
Swift
@objcMembers
final class Hoge: NSObject {}
コメントを残す