http://www.tuicool.com/articles/QZNrErM

iOS 里面 Swift与Objective-C混编,Swift与C++混编的一些比较

 

    即使你尽量用Swift编写iOS程序,难免会遇到部分算法是用C++语言编写的。那你只能去问问”度娘“或“狗哥”怎么用 Swift 调用C++算法。

一,C,C++, Objective-C,Swift有什么关系,还有什么是混编 -.-?

1. 当然是兄弟关系,虽然Objective-C是扩充C的 面向对象 编程语言,C++是在C语言的基础上开发的一种通用 编程语言 。Swift是由苹果公司推出有意让其与Objective-C共存于苹果公司操作系统上。但是Objective-C一直是由苹果公司来抚养,C,C++也因为苹果公司才变得如此流行。

2. 混编,就是混合编译-.-强大吧,好好感受史蒂夫 乔布斯对开发技术人员的尊重和期待。

3. C,C++, Objective ,Swift 但就像《 葫芦娃 》里面七个兄弟中的四个一样牛掰,七葫芦娃是最厉害的,但需要七个兄弟齐心协力才能收妖。类似的,Swift是最小的弟弟,这就意味着Swift是最厉害的。我们在接近新宠Swift的同时,也要经常复习其他语言,不要忘记他的哥哥们。

二,小小的比较

1. Swift和Objective-C

我们都体会得到Swift调用Objective-C并不难,也不麻烦。你只要在swift的工程里创建OC的文件,系统就会提问帮你生成一个bridging-header,只要在这个bridging-header里import所有要用到的OC的头文件,就可以在swift文件里用swift的语言风格来调用OC类了。

2. Swift和C++

C++ 并不 是 像 Objective-C 这样。首先,我们应该想到 Objective-C 与 C++ 是 可以混编 得 perfect ,而且可以使用 STL ,办法就 是 将 OC 的.m文件后缀改成.mm, 然后在 OC 类中写一个 wraper ,然后在里面调用 C++ 的类,封装成几个公共的方法就可以了。这时再用 swift 来调用 wraper 里的方法,就可以执行 C++ 语句了。

三,iOS OC和Swift混编

1. 创建一个swift或者oc的工程:我这里是创建的Swift语言的工程,工程名SwiftTest

2. 在工程中代码目录下创建一个oc的类,选择oc语言, 会出一个对话框,选择YES

3. 这时会在工程里看到下图这样一个头文件.

4. 在这个头文件里添加你的OC文件的.h文件,就可以在任意swift文件中自行调用所包含的oc文件了。

5. 接下来在工程的target-》build Setting->package下个性如下两项

6. 然后在OC代码的.m文件中引入  + “-swift.h” 这样一个头文件,比如我的工程会生成 SwiftTest-swift.h这样一个头文件的。   然后你的.m文件就可以随便调用swift文件了。

其实如果你设置的Defines Module = YES了,   xcode就会默认生成Product Module Name - swift.h这样一个头文件,这个头文件下会有你所有.swift文件的.h信息。

四,总结

1. Swift语言是苹果公司的利器。如果想靠iOS开发来养家人和女朋友,就得好好研究Swift,最好是去苹果官方网站学习,那里有Swift的下载资源和Swift博客,但 苹果官方网站里的文档都是英文,所以英语得过关,这并不代表一定要过四六级,只要看得懂技术文档就行,毕竟六级不是人能看得懂的-.-

2. 看十篇技术文档,不如解决一个问题,不如自己写一个Demo。所以程序员只能苦逼的奉献自己的青春,多写代码—>.->

3. 单身狗要早点找女朋友:)

https://github.com/sandym/swiftpp

https://github.com/GarveyCalvin/Swift-Objective-C-Mutual

swift c++ oc 混编的更多相关文章

  1. iOS开发之swift与OC混编出现的坑,oc中不能对swift的代理进行调用,不能访问swift中的代理,swift中的回调方法

    1. Swift与oc混编译具体怎么实现,这儿我就不重复讲出了,网上有大把的人讲解. 2. 在swift与OC混编的编译环境下, oc类不能访问swift创建类中的代理? 解决方法如下: 在代理的头部 ...

  2. iOS8开发~Swift(五)Swift与OC混编

    一.概要 首先看<The Swift Programming Language>中提到"Swift's compatibility with Objective-C lets y ...

  3. Swift与OC混编

    OC调用Swift的方法:添加 import "xxxx-Swift.h" 头文件即可 Swift调用OC的方法:需要建立桥接: xxxx-Bridging-Header.h 头文 ...

  4. 在OC项目中实现swift与oc混编 相互引用

    --------------------------------------------------------Begin--------------------------------------- ...

  5. Swift和OC 混编

    1.首先创建一个Swift工程 2.导入或者创建一个OC文件(.h和.m) 3.再创建一个桥连接文件 4.然后文件样子为 5.在桥接链接里面导入头文件 6.通过targets->->bui ...

  6. swift与OC混编之调用函数

    在桥接头文件里#import oc的.h文件,整个swift工程都能使用该oc文件,在.h里暴露的方法都能被该工程使用 //oc文件 TestOC.h #import @interface TestO ...

  7. swift与OC混编高级教程之混编框架的创建和调用

    首先创建一个project取个名字叫“MyMixed”,选择iOS-framework&library-cocoa touch framework 然后在里面创建一个SwiftView.swi ...

  8. swift和 oc 混编2-备

    在Swift语言出现之前,开发iOS或OS X应用主要使用Objective-C语言,此外还可以使用C和C++语言,但是UI部分只能使用Objective-C语言. 选择语言 Swift语言出现后,苹 ...

  9. swift和oc混编

    请参考这篇博客:点击查看

随机推荐

  1. 【转】用ASP.NET Core 2.1 建立规范的 REST API -- 缓存和并发

    原文链接:https://www.cnblogs.com/cgzl/p/9165388.html 本文所需的一些预备知识可以看这里: http://www.cnblogs.com/cgzl/p/901 ...

  2. 利用devcon工具编写bat脚本一键控制系统设备,如开启关闭网卡

    系统WIN7 x64位 下载devcon命令行工具 Download the "Windows Driver Kit (WDK) 7.1.0 from Microsoft: http://w ...

  3. GraphSAGE 代码解析 - minibatch.py

    class EdgeMinibatchIterator """ This minibatch iterator iterates over batches of samp ...

  4. Linux pthread 线程池实现

    基于pthread封装了一个简易的ThreadPool,具有以下特性: 1.具有优先级的任务队列 2.线程池大小可以二次调整,增加线程或者删除空闲线程 3.任务两种重写方式,重写run或者使用函数回调 ...

  5. 时间戳转换成日期的js

    在项目开发过程中,我们常常需要把时间戳转换成日期.下面这个是我一直使用的js方法,希望能帮助到有需要的朋友.大家如果有更好的方法,请多多指教! js代码如下: //时间戳转换成日期 function ...

  6. ps学习笔记(二)

    1)选择所有图层: Ctrl+Alt+A2)查找层:ctrl+alt+shift+f,需要在层面板输入查找层名,可自动查找层:3)隔离层:可将选择图层,更改为隔离,只对选择的层编辑:注:图层面板中有一 ...

  7. 【转】IBatis.Net项目数据库SqlServer迁移至Oracle

    转自:http://www.2cto.com/database/201312/265514.html 最近完成了一个(IBatis.Net+MVC)项目的数据库+代码迁移工作,可把我折腾得~~~ IB ...

  8. BZOJ4568 [Scoi2016]幸运数字 【点分治 + 线性基】

    题目链接 BZOJ4568 题解 选任意个数异或和最大,使用线性基 线性基插入\(O(logn)\),合并\(O(log^2n)\) 我们要求树上两点间异或和最大值,由于合并是\(O(log^2n)\ ...

  9. 使用 URLDecoder 和 URLEncoder 对中文字符进行编码和解码

    原文: https://blog.csdn.net/justloveyou_/article/details/57156039 使用 URLDecoder 和 URLEncoder 对中文字符进行编码 ...

  10. 从零开始学习MXnet(五)MXnet的黑科技之显存节省大法

    写完发现名字有点拗口..- -# 大家在做deep learning的时候,应该都遇到过显存不够用,然后不得不去痛苦的减去batchszie,或者砍自己的网络结构呢? 最后跑出来的效果不尽如人意,总觉 ...