OC与Swift混编

Posted weasleyqi

tags:

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

Swift发展势头越来越好,而很多公司很难一下子从OC全部切换到swift,这个时候混编就显得那么的重要,本人也在逐渐的尝试混编然后逐步取代OC,从而全部转到swift上。

其实,从2014年swift刚出来的时候就开始研究swift的相关语法及定义了,但是由于公司很难转变,所以一直也没有运用到实践当中,这个时候就非常佩服那些小公司,或者应该叫初创公司,没有任何的烦恼,新开发的app都是运用swift。。。非常羡慕。。。

好了,废话不多说,看看用法吧。。

首先,我们有一个OC项目的工程,我这边叫MixDemo,这个时候需要新增一个swift的类,与添加OC类一样,只是选择的语言选择swift。

技术分享

由于我的工程是OC的工程,添加一个swift文件的时候,苹果会问开发者要不要添加一个bridge,我们需要添加这样一个桥接。

技术分享

这个时候我们会看到我们的工程里面多了一个MixDemo-Bridging-Header.h的文件

我们在swift文件中添加一个方法,返回一个字符串:

class Test4SwiftVC: NSObject {
    func f1() -> String {
        return "Test Mix"
    }
}
那么问题来了,如何在OC的.m文件中调用该方法呢?

我们先看看工程文件里面的build Settings:

技术分享

看到红色标注出来的地方,默认是工程名称-Swift.h,我们自定义为SwiftModule-Swift.h,以方以后修改工程名称的时候出错。这个文件就是我们在OC类中调用swift类的引用头文件,这个类在工程中看不到,但是我们可以Command+点击查看这个类的内容:

技术分享

在OC的实现文件中,引用该头文件,即可调用swift中的类了:

- (void)viewDidLoad {
    [super viewDidLoad];
    Test4SwiftVC *VC = [[Test4SwiftVC alloc] init];
    [VC f1];
    // Do any additional setup after loading the view, typically from a nib.
}
这样我们就可以在OC中调用swift中的f1方法了。


那么在swift中怎么调用OC的方法或者变量呢?

我们在ViewController中定义一个字符串:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@property (strong, nonatomic) NSString *str;

@end

还记得我们一个的桥接文件么?似乎我们还没用到吧,这个时候就派上用场了。

我们在MixDemo-Bridging-Header.h中添加OC的头文件:

#import "ViewController.h"

然后在swift文件中就可以引用啦。。。

func f2() {
        var vc = ViewController()
        var str: String = vc.str
    }

我们在swift中定义了第二个函数,定义一个变量vc去初始化ViewController这个类,然后定义一个String类型的变量来接收OC类中的参数,这样就可以互相调用啦,调用OC中的函数也是同样的道理,大家可以自己去研究。。。





以上是关于OC与Swift混编的主要内容,如果未能解决你的问题,请参考以下文章

OC与Swift混编

Swift与OC的混编

OC 与 swift 混编杂记

iOS OC与Swift混编

swift与oc混编

OC与Swift混编