一.callObjectiveCFromSwift
(1)创建一个Swift项目。输入名称为callObjectiveFromSwift,选择语言为swift
(2)添加基于ObjectiveC语言的类
新建一个文件—>Cocoa Touch Class —> Languages选择ObjectiveC。
此时弹出是否建立桥头文件。选择yes。
【注意,如果不小心了No,或者需要自己建立新的桥头文件,按如下两步:
a.建议一个名称为ProductModuleName-Bridging-Header.h的桥头文件
b.设置ObjectiveC-Bridging-Header的编译属性(Build Settings)为桥头文件
】
(3)在ObjectiveC.m中添加代码实现,在objectiveC.h中添加相关声明。
objectiveC.h
- (void)print;
objective.m
-(void)print{
NSLog(@"我是函数实现");
}
(4)在桥头文件中导入这个类
#import “ObjectiveC.h”
(5)在Swift中使用这个ObjectiveC类
let oc = ObjectiveC()
oc.print()
整个调用过程如下图所示:
二.callSwiftFromObjectiveC
(1)创建一个ObjectiveC工程,工程名位callSwiftFromObjectiveC,Language选择Objective-C
(2)添加一个Swift类,在Swift类中定义类和方法。
Xcode总会自动生成一个ProductModuleName-Swift.h头文件,当类为@objc标记类和Public权限时,该类将包含在头文件中。
// 定义继承与NSObject基类的Swift类
override init(){
public class Swift: NSObject{
NSLog("Creating Swift instance...")
}
public func sayHello(){
NSLog("Hello OldCoder!")
}
}
(3)添加Objective-C代码,导入callSwiftFromObjectiveC-Swift.h头文件,实现对Swift类的调用。
#import “callSwiftFromObjectiveC-Swift.h”
Swift * swift = [[Swift alloc] init]; // 实例化Swift
[swift sayHello]; // 调用Swift的sayHello方法
整个调用过程如下图所示:
注意事项:
OC项目引入使用swift编写的三方库后报错的话
解决办法:
选中Pods项目
TARGETS选择对应的使用swift编写的三方库
切换到Build Setting选项
在搜索框输入swift language搜索
将Swift Language Version中的Unspecified改为对应的Swift版本(Swift 3.2) ,或者使用legacy version。
重新build项目,这是可能会报一些Swift的语法错误,修改一下就OK了。