SwiftプロジェクトでC++を使う場合、以下の手順を踏みます。
- C++ファイル・ヘッダファイルを作成
- 作ったC++ファイルをラップするObjective-C++ファイル・ヘッダーを作成
- Objective-CブリッジヘッダでObjective-C++ファイルのヘッダーをインポート
- swiftファイルからObjective-C++のコードを呼び出し
C++ファイル・ヘッダファイルを作成
C++ファイル・ヘッダファイルを作成します。
cpp.h
#ifndef __SwiftAndObjCpp__cpp__
#define __SwiftAndObjCpp__cpp__
#include <stdio.h>
class Cpp {
public:
void run();
};
#endif /* defined(__SwiftAndObjCpp__cpp__) */
cpp.cpp
#include "cpp.h"
void Cpp::run() {
printf("cpp run");
}
作ったC++ファイルをラップするObjective-C++ファイル・ヘッダーを作成
Objective-C++ファイル・ヘッダーファイルを作り、C++コードを呼び出します。
objcpp.h
#ifndef SwiftAndObjCpp_objcpp_h
#define SwiftAndObjCpp_objcpp_h
#import <Foundation/Foundation.h>
@interface ObjCpp : NSObject
-(void)run;
@end
#endif
objcpp.mm
#import <Foundation/Foundation.h>
#import "objcpp.h"
#import "cpp.h"
@implementation ObjCpp {
Cpp *cpp;
}
-(id)init {
self = [super init];
cpp = new Cpp();
return self;
}
-(void)dealloc {
delete cpp;
[super dealloc];
}
-(void)run {
cpp->run();
}
@end
##Objective-CブリッジヘッダでObjective-C++ファイルのヘッダーをインポート
Objective-Cブリッジヘッダを作成し、Objective-C++ファイルのヘッダーをインポートします。
Objective-Cブリッジヘッダは、SwiftプロジェクトにObjective-Cファイルを追加する際のダイアログでOKを選択すると、自動で作成されます。
SwiftAndObjCpp-Bridging-Header.h
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//
#import "objcpp.h"
swiftファイルからObjective-C++のコードを呼び出し
以上で、SwiftでC++のコードを呼び出す準備が整いました。
最後に、SwiftコードからObjective-Cのメソッドを呼び出します。
インポートは不要です。
ViewController.swift
import Cocoa
class ViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Objective-C++メソッド呼び出し
var objcpp = ObjCpp()
objcpp.run()
}
}