[iOS]#Swift#OC+Swift混编

来源:互联网 发布:怎么修改mac地址 编辑:程序博客网 时间:2024/06/05 17:29

OC+Swift混编

随着2014年WWDC推出Swift以后,这个新的脚本语言受到广大开发者的青睐,然而由于很多第三方库依旧用的是OC, 或者现有代码是用OC写的,所以如果想用Swift,更多的情况会是在混编下完成的。所幸混编并不复杂,唯一的缺陷就是会让你的包更大(详情见网页<Swift Embedded Runtime Library Increases App Size>).

       接下来让我们用一个简单的例子来实现混编,首先以ObjectiveC为主要语言创建一个项目:<ObjectiveSwift>


         接下来创建一个Swift文件,用来新建一个SwiftObject对象:


        这里选择  Yes , 然后会生成一个‘桥接’头文件,用来向Swift声明哪些ObjectiveC文件可用,值得一提的是,在混编项目中会有两个桥接头文件:

一个是用来向Swift暴露OC的(OC->Swift),系统会自动命名为:

<项目名-Bridging-Header>,即 ObjectiveSwift-Bridging-Header.h

另一个是向OC暴露Swift的头文件(Swift->OC),这个文件会被命名为:

<项目名-Swift.h> ObjectiveSwift-Swift.h,这个文件是不可见的,虽然也是自动生成,但是在项目里面是找不到这个文件的,按住command然后跟踪对象方法可以进入这个文件,可以看到所有Swift对象及其方法会被生成到这个文件里。

OC调用Swift

        比如,新建一个Swift对象:(SwiftObject.swift)

import Foundationimport UIKitclass SwiftObject:NSObject{    func  say(){        println("Output from Swift")    }}



        如果希望在OC中调用这个对象的say方法,就需要在OC文件中import "ObjectiveSwift-Swift.h". 然后使用方式跟使用OC对象一样:(ViewController.m)

#import "ViewController.h"#import "ObjectiveSwift-Swift.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    SwiftObject *obj = [[SwiftObject alloc] init];    [obj say];}@end
             按住command跟踪ObjectiveSwift-Swift.h文件可以看到这个‘不可见’的文件,可以看到里面有Swift的对象以及方法:


Swift调用OC

先创建一个OC对象 OCObject:

<span style="font-size:18px;">#import "OCObject.h"@implementation OCObject- (void) say{    NSLog(@"Output from ObjectiveC");}@end</span>
为了让Swift能调用这个对象,需要将此文件暴露给Swift, 所以要在‘桥接’头文件中引入这个对象的头文件:


然后在Swift对象里就可以调用这个对象了,并且无需单独再引入头文件,直接可用:

<span style="font-size:18px;">import Foundationimport UIKitclass SwiftObject:NSObject{    func  say(){        println("Output from Swift")    }        func sayFromOC(){        var ocObj = OCObject.new()        ocObj.say()    }}</span>


Demo下载地址


0 0
原创粉丝点击