LoginSignup
87
83

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-11-22

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()
    }
}
87
83
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
87
83