Help us understand the problem. What is going on with this article?

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

More than 5 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()
    }
}
hiz_
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away