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混编的主要内容,如果未能解决你的问题,请参考以下文章