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++的库,就有必要这样了。

具体实践自己另行体会吧。

 
 
 
 
 
 
 

IOS-Swift、Objective-C、C++混合编程的更多相关文章

  1. iOS - Swift 与 C 语言交互编程

    前言 作为一种可与 Objective-C 相互调用的语言,Swift 也具有一些与 C 语言的类型和特性,如果你的代码有需要,Swift 也提供了和常见的 C 代码结构混合编程的编程方式. 1.基本 ...

  2. Swift 与 C 语言混合编程

    前言 作为一种可与 Objective-C 相互调用的语言,Swift 也具有一些与 C 语言的类型和特性,如果你的代码有需要,Swift 也提供了和常见的 C 代码结构混合编程的编程方式. 1.基本 ...

  3. 《从零开始学Swift》学习笔记(Day 71)——Swift与C/C++混合编程之数据类型映射

    原创文章,欢迎转载.转载请注明:关东升的博客 如果引入必要的头文件,在Objective-C语言中可以使用C数据类型.而在Swift语言中是不能直接使用C数据类型,苹果公司为Swift语言提供与C语言 ...

  4. 《从零開始学Swift》学习笔记(Day 71)——Swift与C/C++混合编程之数据类型映射

    原创文章.欢迎转载.转载请注明:关东升的博客 posted @ 2017-07-21 13:23 zhchoutai 阅读(...) 评论(...) 编辑 收藏

  5. Objective-C与Swift的混合编程

    Swift 被设计用来无缝兼容 Cocoa 和 Objective-C .在 Swift 中,你可以使用 Objective-C 的 API(包括系统框架和你自定义的代码),你也可以在 Objecti ...

  6. swift 与 OC 混合编程

    原文地址:http://www.cocoachina.com/swift/20150608/12025.html 一.解决问题 Swift项目需要使用封装好的Objective-c组件.第三方类库,苹 ...

  7. Swift和Objective-C混合编程——Swift调用OC

    在iOS应用的开发中.Swift必将代替OC,两者的趋势是"短期共存,长期代替".但曾经有太多的代码是用OC语言完毕的,而Swift的开发也从 OC中继承了非常多的特性.两者也是有 ...

  8. 用c/c++混合编程方式为ios/android实现一个自绘日期选择控件(一)

    本文为原创,如有转载,请注明出处:http://www.cnblogs.com/jackybu 前言 章节: 1.需求描述以及c/c++实现日期和月历的基本操作 2.ios实现自绘日期选择控件 3.a ...

  9. Objective-C:swift、objective-c、C++、C混合编程

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css); @import url(/ ...

随机推荐

  1. Most middleware (like favicon) is no longer bundled with Express

    Error: Most middleware (like favicon) is no longer bundled with Express and must be installed separa ...

  2. Android Logcat 封装类

    简单日志封装类: public final class CLog { public static final boolean DEBUG = true; private CLog() { } publ ...

  3. 15个私有云上的DevOps 开源工具

    本文由来:之前工作需要,在查找运维自动化资料时,发现了这篇文章的英文原版,觉得很不错.它综合的介绍了哪些工具,我们运维人员需要掌握,并且如何进行结合其它工具一起使用.给了一些指导性的意见.由于是英文的 ...

  4. RequireJS 模块化加载框架使用

    RequireJS 是一个遵循 AMD 规范的模块化加载框架 与上文seajs一样,这里简单介绍其相关用法 同样的,首先是下载好 require.js --> http://requirejs. ...

  5. ADO.NET---ExcuteScalar()方法复习

    ExcuteScalar(),返回的是查询结果的第一行第一列,返回值是object类型,一般用来查询表中有多少条数据,求最大值等 现在我们用ExcuteScalar()做个测试,需求:我要查询学生表里 ...

  6. 利用代码生成工具Database2Sharp设计数据编辑界面

    在Winform程序开发中,界面部分的开发工作量一般是比较大的,特别是表的字段数据比较多的情况下,数据编辑界面所需要的繁琐设计和后台逻辑处理工作量更是直线上升,而且稍不注意,可能很多处理有重复或者错误 ...

  7. .Net实现微信公众平台开发接口(三) 之 “信息回复”

    对于每一个POST请求,开发者在响应包(Get)中返回特定XML结构,对该消息进行响应(现支持回复文本.图片.图文.语音.视频.音乐).请注意,回复图片等多媒体消息时需要预先上传多媒体文件到微信服务器 ...

  8. PHP功能齐全的发送邮件类

    下面这个类的功能则很强大,不但能发html格式的邮件,还可以发附件 <?php class Email { //---设置全局变量 var $mailTo = ""; // ...

  9. ActiveReports 报表应用教程 (7)---交叉报表及数据透视图实现方案

    在 ActiveReports 中可以通过矩阵控件非常方便的实现交叉报表,同时还可以设置数据的分组.排序.过滤.小计.合计等操作,可以满足您报表的智能数据分析等需求.在矩阵控件中组的行数和列数由每个行 ...

  10. 关于spring配置文件properties的问题

    我遇到的问题是我将properties放在src下面的包中不能被spring扫描到,会报配置文件找不到的错误.但是如果放在src目录下就能够被spring扫描到,现在还不知道为什么这样,记个笔记,留到 ...