swift可以和oc混合编写吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift可以和oc混合编写吗相关的知识,希望对你有一定的参考价值。

参考技术A 是可以的啊。oc代码可以插入swift,同样swift也可以插入oc,oc插入swift需要用导入target名+swift.h,当然你在混编创建一个swift文件的时候如果没有提醒你创建一个桥接文件你是需要自己创建一个的,这个是为了帮你把oc转成swift(原项目是oc的基础下),有不明白的可以再提出来

Swift 4 和 Objective-C 混合编程 快速起步

Swift 4 Objective-C 在同一个工程里的混搭编程的方法


你可以在 xcode 里同时使用 Swift Objective-C(以下简称OC)来写代码,混搭编程的好处很多,比如允许大量代码的复用,在性能和开发效率之间找到平衡等。


Swift 中引用 OC

我们建立一个工程时,XCode会询问我们选择什么语言进行开发,如果你选择的是OC,那么当你第一次新建一个swift文件时,开发环境会询问你是否建立一个 .h 文件。这个 .h 文件命名方式是 ”#ProjectName#-Bridging-Header.h” 。你可以让开发环境帮你创建这个文件,也可以自己建,编译器只认这个文件名,只要别写错就好。


我们称这个文件叫桥接文件,它的作用是把OC代码选择性的暴露给swift,让swift可以调用这些接口。

暴露的方式是通过import,也就是说,你可以在这个 .h 文件里 import 任何你想要暴露给swift的代码,然后就可以在 swift 中访问了。


尝试步骤如下:

  1. 打开xcode,创建一个OC工程 HelloWorld

  2. 创建一个叫 HelloOC OC 类,实现静态方法 hello,实现代码 NSLog(”hello, OC.”)

  3. 创建一个叫 HelloSwift swift 类,继承NSObject,实现静态函数 hello(),实现代码 NSLog(”hello, swift.”)

  4. 这时候 xcode 会弹出询问是否创建文件 HelloWorld-Bridging-Header.h ,选择是,如果你点了否,就自己创建一个

  5. HelloWorld-Bridging-Header.h 代码里,加入 #import “HelloOC.h”

  6. HelloSwift hello 函数里,在 NSLog(”hello, swift.”) 后追加 HelloOC.hello()


如果编译成功了,那就说明编译器允许让你通过 HelloSwift 调用 HelloOC 的代码了。

这时候执行程序,会发现输出终端并没有打印任何东西。因为程序主体本身并没有调用 HelloSwift,我们建立的是 OC 工程,所以这时候就需要 OC 来调用 swift代码了。


OC 中引用 swift

当我们建立 HelloSwift 时,xcode 其实做了一些后台工作,除了询问你是否建立 ”HelloWorld-Bridging-Header.h” 外,它还隐式的创建了一个叫 “HelloWorld-Swift.h” 的头文件,记住,这个文件是 xcode 隐式创建的,所以不要自己去建立这个文件,很多人查资料发现需要这个头文件没看仔细就自己去创建,结果导致各种编译不通过。

这个 HelloWorld-Swift 文件从文件到代码都是 xocode 动态生成的,你不需要编辑它,如果感兴趣里面到底写了什么,你可以通过 import 这个文件,Jump To Definition 的方式一探究竟。


当你需要暴露 swift 的类给 OC 调用时,你不需要通过任何逐个 import 的方式,你只要 import “HelloWorld-Swift.h” 即可。

尝试步骤如下:

  1. ViewController.m 文件中,引入头文件 #import “HelloWorld-Swift.h”

  2. ViewDidLoad 方法的实现中,调用 [HelloSwift hello];


这时候编译,执行,你可以发现工程打印日志输出为:

Hello, Swift.

Hello, OC.


到此为止,我们已经通过 OC 代码简单调用了 swift 代码,又通过 swift 代码调用了 OC了。但是这只是最基本的互相调用的案例。在实际工程中存在更多复杂的特殊案例,需要通过其它技术才能解决(比如 命名不兼容问题等)。这些留在后面继续写。




参考资料:https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

---

想交流开发技术的朋友可以加群:527628370


本文出自 “智慧咖啡屋” 博客,请务必保留此出处http://dothebest.blog.51cto.com/699987/1939590

以上是关于swift可以和oc混合编写吗的主要内容,如果未能解决你的问题,请参考以下文章

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

swift与oc的混合编程

Swift 4 和 Objective-C 混合编程 快速起步

iOS 中 OC项目使用swift第三方工具(OCswift 混合)

Swift和Objective-C混合编程

swift与OC混编