C++
Swift

SwiftプロジェクトでC++を使う方法メモ

More than 3 years have passed since last update.

SwiftプロジェクトでC++を使う場合、以下の手順を踏みます。


  1. C++ファイル・ヘッダファイルを作成

  2. 作ったC++ファイルをラップするObjective-C++ファイル・ヘッダーを作成

  3. Objective-CブリッジヘッダでObjective-C++ファイルのヘッダーをインポート

  4. 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()
}
}