swift c++ 混编

3,186 阅读1分钟

说起swift混编, 直接想到的就是 添加一个oc 类做桥接。但是这似乎不是很swifty,所以 我们做了更深入的调研 ----module.map

module.map

新建一个static framework 即默认有一个module.map

若是动态库 需要自己加。

how to do

我们新建一个 workspace 工程,添加一个 framwork project, 和一个目标project(需要混编的)

1.在 framewokr 中 添加 c++文件。 2.c++用c导出, 添加c 的头文件来导出c++

//
//  PersonExtern.h
//  CppKit
//
//  Created by dog on 2019/12/14.
//  Copyright © 2019 dog. All rights reserved.
//

#ifndef Dog_h
#define Dog_h

#include <stdbool.h>

typedef void* Dog;

#ifdef __cplusplus
extern "C"{
#endif
    //在这里写上c的代码
    
    //初始化一个Dog的实例
    Dog dog_init();
    
    //dog调用吠的方法
    void dog_wang(Dog dog);

    

#ifdef __cplusplus
}
#endif

#endif /* Dog_h */

  1. 增加一个 pch 文件 将 该 c 头文件导出
  2. module.map 文件 (如果没有该文件 则新建) 这里我们定义了一个模块名,默认头文件是我们的pch,全部导出。
module SwiftCppExtern [system] {
    header "dog.pch"
    export *
}

  1. 增加 swift文件,方便swift调用。
import Foundation
import SwiftCppExtern

open class Dog {
    private let dog : Dog
    
    public init() {
        dog = dog_init()
    }
    
    open func wang() {
        dog_wang(dog)
    }
}

  1. 在 目标文件中使用