说起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 */
- 增加一个 pch 文件 将 该 c 头文件导出
- module.map 文件 (如果没有该文件 则新建) 这里我们定义了一个模块名,默认头文件是我们的pch,全部导出。
module SwiftCppExtern [system] {
header "dog.pch"
export *
}
- 增加 swift文件,方便swift调用。
import Foundation
import SwiftCppExtern
open class Dog {
private let dog : Dog
public init() {
dog = dog_init()
}
open func wang() {
dog_wang(dog)
}
}
- 在 目标文件中使用