[iOS]#Swift#OC+Swift混编

本文介绍如何在iOS开发中实现Objective-C与Swift的混合编程。通过实例演示了如何创建混编项目、OC如何调用Swift类及Swift如何调用OC类的方法。此外还讲解了桥接头文件的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 Foundation
import UIKit
class 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 Foundation
import UIKit
class SwiftObject:NSObject{
    func  say(){
        println("Output from Swift")
    }
    
    func sayFromOC(){
        var ocObj = OCObject.new()
        ocObj.say()
    }
}</span>


Demo下载地址


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值