转自https://yq.aliyun.com/articles/38039?spm=a2c4e.11155435.0.0.246e5760lzQa8q
1、Objective-C调用C++代码
后缀为m文件的是Objective-C的执行文件,而后缀为mm文件的是Objective-C++文件。
直接在Objective-C中是无法调用C++代码的,所以如果需要在Objective-C调用C++语言就需要直接将后缀m文件改为mm,然后就可以调用C++代码了。
Objective-C兼容C,Objective-C++兼容C、C++。
接下来是在OC工程中创建C++文件,并调用C++的代码:
然后在OC文件中直接用C++的语法调用C++,所以前提是OC语言执行文件后缀是mm文件。
2、C++调用Objective-C代码
先继续在上面使用的工程中新建一个Objective-C的类,并添加一个简单的实例方法。
但是是不能直接在C++文件中直接调用OC代码的,会直接失败报错的,因为C++引入的是OC类的头文件,这样是无法通过OC语法,所以在OC的.h头文件是不能有任何OC语法,SO不好意思,把上面OC的.h头文件里的代码全部清掉,然后把OC的.m文件后缀改为.mm文件:
然后在C++代码中调用Objective-C代码:
然后我们来创建Objective-C类,并通过特定的方式来调用:
注意一个容易错误的细节:
如果C++的方法调用后面创建的对象或者方法,会报错,会提示没有声明和定义该对象或者方法,所以要放在后面才能执行通过。这里注意OC的对象调用方法的语法是:[实例对象 方法]。
3、Swift调用C语言代码
这一点和Swift调用C++语言代码是一样的,在Swift工程中新建C++或者C语言文件,都会自动生成一个桥梁文件,写好C++代码或者C代码,都要记得把其头文件导入到这个桥梁文件中。然后就可以在Swift文件中直接用Swift语法直接使用C++和C的方法。
4、Swift、Objective-C、C++混合编程
这里要强调的一点:Swift是不能直接使用C++的代码的,但是可以创建Objective-C文件作为中间人,来调用C++代码。但是有时候设计程序的时候,绝非必要的情况下最好不要这么做,因为C++ -> Objective-C -> Swift 这个过程花时间比较长。如果能通过C语言实现的话,最好直接使用C语言。
有很多有用的库是用C++写的,所以如果Swift需要使用C++的库,就有必要这样了。
具体实践自己另行体会吧