大型 App 由于跨平台的需要,底层一般会采用 C++来实现,当时再往上到应用层的话基本都会用对应平台的语言,比如 Windows 可能会用 C#,Android 用 Kotlin,iOS 用 Swift。
我这里主要想探讨一下 Swift 与 C++ 混合编程最佳实践。
由于 Swift 无法直接调用 C++,所以不得已需要引入一个中间层包装 C++代码。
目前实践过两种方法
第一种做法比较自然,也是苹果教的方法。
但是存在一个问题,因为 Objective-C 都是以面向对象为导向的,所以封装 C++代码时 就需要用对象方式 在 Objective-C 中 建立模型。但是我其实希望 Objective-C 这一层尽量的薄,我们应该把所有的模型建立在 Swift 这一层,这样才能让代码的可维护性更好。
这样 就引出 第二种方式,直接用 C 封装 C++,仅仅是最简单的封装导出,而所有的对象模型建立在 Swift 这一层。目前感觉这种方式是优于第一种方式的。
不知道各位还有其他更好的方法不?
1
skadi 2018-02-09 14:17:20 +08:00
extern "C" ?
|
2
skadi 2018-02-09 14:20:53 +08:00
是说在
cpp : node.getxxxx(args...) c : node_getxxx(node*,args...) |
3
StephenW 2018-02-09 14:33:05 +08:00
extern "C", modules 的形式去封装 C++的代码。
但你始终没法在 Swift 里面 OOP 地使用 C++,你始终需要 C API 的风格去调用。 不过好久没写 C Family 了,也不知道记的有差池不。。。 |
4
free9fw 2018-02-09 14:35:16 +08:00
Objective-C++应该好一点
|
5
expkzb 2018-02-09 16:57:05 +08:00
一般用 c++来实现哪些模块呢?
|
6
DingSoung 2018-02-09 17:03:12 +08:00 via iPhone
使用 modulemap
|
7
dawn009 2018-02-10 03:40:11 +08:00
我喜欢第二种。中间层尽量越简单越好。目前没发现更好的方法。
|
8
wizardforcel 2018-02-10 09:40:47 +08:00 via Android 1
第二种是通用的。只要一种编程语言可以 ffi 就能用。
如果以后你还想移植 python 或者其他的地方也不用改代码。 |