[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下载地址
- [iOS]#Swift#OC+Swift混编
- iOS Swift和OC混编
- iOS-OC中混编swift
- IOS --- OC与Swift混编
- Swift 混编 OC , OC 混编 Swift
- IOS --- OC与Swift混编
- IOS-Swift混编 调用OC的Block
- IOS --- OC与Swift混编
- Swift Swift和OC混编
- Swift与OC混编
- OC与Swift混编
- oc 和 swift 混编
- OC与Swift混编
- oc swift 混编 特技
- Swift和OC混编
- Swift OC 混编
- OC与Swift混编
- Swift - OC的混编
- cocos2dx 玩转震动
- IOMMU
- Qt Creator的配置和开发初步测试
- eclipse adt 和 android studio 的区别
- CocoaPods详解--使用
- [iOS]#Swift#OC+Swift混编
- 淘宝分享互联网用户的心理特征
- 儿子/兄弟树
- ecshop警告修改心得
- 一个ios不错的blog地址
- 以后的数据都记录在这里了
- 【Loadrunner】端口号占满问题,另类的解决方法
- Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1)A,B
- java数据库操作