混合使用Swift,Objective-C, C++, Objective-C++
来源:互联网 发布:数据库概论答案 编辑:程序博客网 时间:2024/06/01 10:00
这个话题并不是一个新的话题,网上有前辈做过详细的描述(Mixing Objective-C, C++ and Objective-C++: an Updated Summary)。之所以做为一篇文章,是因为在实际项目中用到了这种混合,加以记录。
首先需要澄清的是,Objective-C是strict superset of C. C++是基于C语言的面向对象的扩充,但不是strict superset of C. Objective-C++是Objective-C的扩展,使得Objective-C可以链接C++代码。通常情况下,要使用Objective-C++,需要将XCode中.m源文件改成.mm源文件。
其次需要澄清的是,Objective-C代码跟C++代码是不能混合使用的,也就是说,Objective-C的头文件中是看不到C++的头文件的。当然,C++的头文件是看不到Objective-C的头文件的。只有Objective-C++文件(也就是.mm文件)可以看到Objective-C的头文件和C++的头文件。
正因为Objective-C和C++互相不能见到对方的头文件,那么就意味着,现有的C++的代码库,想要在Objective-C中使用,是需要封装的,通常,这种封装是借助于Objective-C++写成的Wrapper.
另一方面,Wrapper本身也有技巧,那就是使用Objective-C的class extension特性(或者使用Pointer to implementation设计模式),避免将C++头文件暴露给Objective-C(否则无法编译通过)。具体细节可以参考文章开头的链接。
最后,如今Swift正在取代Objective-C,成为iOS开发的主流语言。需要澄清的是,Swift可以借助Bridging-Header文件与Objective-C互通(双方可以互相看见对方的类),同样的,也可以与Objective-C++文件互通,但是,Swift无法通过Bridging-Header文件与C++文件互通。
正因为Swift无法与C++互通,所以,对于Swift开发的产品,如果想要使用现有的C++代码库,必然要引入Objective-C++文件。
另一方面,需要澄清的是,Swift中的类,并不是完全与Objective-C(++)互通的。最直接的例子是Swift中的Optional特性。该特性在Objective-C的世界没有对应。也就意味着,即使通过Bridging-Header连接,Objective-C中依然无法看到Swift中的Optional的Field. 这个差距使得想要在Swift中使用C++(或者说Objective-C)变得复杂,往往不得不引入一个converter来处理Swift类的Optional特性的域。
- 混合使用Swift,Objective-C, C++, Objective-C++
- 关于swift与objective-c混合使用
- 关于swift与objective-c混合使用
- iOS混合编程之使用Swift+Objective-C调用WebService
- Swift和Objective-C混合编程
- Swift和Objective-C混合编程
- Swift 与 Objective-C混合编程
- Swift和Objective-C的混合编程
- Objective-C和Swift混合编程开发
- Swift和Objective-C混合编程
- Swift与Objective-C混合编程
- 关于swift与objective-c混合编译
- Objective-C Swift 混合编程的demo
- 混合使用Objective-C,C++和Objective-C++(转载)
- C++、Objective-C 混合编程
- C++、Objective-C 混合编程
- C++、Objective-C 混合编程
- C++、Objective-C 混合编程
- 滤镜
- 云表格的技术(四)
- linux基础知识(centos)
- 【笔记】《WebGL编程指南》学习-第3章绘制和变换三角形(4-动画))
- python的dict实现
- 混合使用Swift,Objective-C, C++, Objective-C++
- 算法练习(4)—— 贪心算法
- Arduino通过串口透传ESP 13板与java程序交互
- 第一篇博客记录心情
- 寻找最大连续子串和
- 关于8皇后的分布式运算
- 析构函数是虚函数时
- Oracle数据库系统结构
- linux(deepin)使用virtualbox安装win10,遇到的问题