苹果推出Swift后,很快就受到程序猿的青睐,快速、安全、简洁的开发已经是一个大趋势了。如果在加上C和C++真的是天衣无缝了,完美结合。对于Swift调用C和C++,通常需要OC做桥接(oc调用c和c++),性能得不到优化。我们今天直接用Swift调用C使性能得到全面的提升。苹果号称和C一样快的Swift的demo我们来粒子。
测试环境:
Xcode版本:11.0 Swift版本:5.0
Swift直接调用C
我们直接进入主题,Swift调用C。先创建一个工程SwiftAndC,然后创建一个C文件,命名为CTest,.h文件创建以下函数
1 | #ifndef CTest_h |
在.c文件里实现该函数:
1 | #include "CTest.h" |
我们定义两个c函数(c不是很厉害只能这么简单,会使用就好)。我们现在用Swift调用。
我们定义一个头文件,也就是对外(swift)的接口。我们创建一个.h文件,命名为CBridgie.h。
1 | #ifndef CBridge_h |
对于上边的定义如果不是很明白,可以自己在网上查查,有很多讲解,我在这里就不多说啦。在创建的时候会有提示是否创建桥接文件,记得点击是,如果点击了否,那么就要自己创建了,怎么创建呢。推荐一篇文章。
我们需要在桥接文件中导入CBridge.h。然后我们在默认的ViewController.swift里运行。
1 | private func swiftUseC(){ |
到此,我们已经成功的调用的C语言。对于c++呢我们也是这个方法。
Swift调用C++
swift要调用c++和c是一样的。我们先创建一个c++文件,命名为DogModel。
在.hpp里声明一个类:
1 | #ifndef DogModel_hpp |
在.cpp里实现这个类。
1 | #include "DogModel.hpp" |
我们在CBridge.h中加上c++接口:
1 | /**C++方法 |
记得加上声明:
typedef void* CDogModel;
我们需要在.cpp文件里实现这些函数:
1 | // MARK: - 实现接口函数 |
在ViewController.swift调用
1 | private func swiftUseCP(){ |
C调用Swift
swift调用C,那么C也能调用Swift。我们来看看是怎么调用的。
在桥接文件里声明一个回调函数:
extern void(^ __nonnull swiftFuncIMP)(int);
在CTest.h文件里初始化
void(^ __nonnull swiftFuncIMP)(int) = NULL;
在swift里声明一个函数,并赋值给这个回调函数。
1 | func C_UserSwiftFun(a:Int32) -> Void { |
最后附上demo地址
欢迎指正。
本文作者: NUK
最后更新: 2023年12月13日 17:35:03
本文链接: http://www.uilucky.com/post/6594f82c.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!