1.Swift调用ObjectiveC
- 1.1创建OC类
//testObject.h文件
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface testObject : NSObject
-(void)seyHello;
@end
NS_ASSUME_NONNULL_END
//testObject.m文件
#import "testObject.h"
@implementation testObject
-(void)seyHello{
NSLog(@"seyHello-from Objective-C");
}
@end
- 1.2创建桥接文件
在Swift工程内想要调用OC是相对比较容易的,只需在桥接文件中导入想要调用的OC类即可。
当在Swift工程中创建完成OC类的时候,系统会提示我们是否创建桥接文件,这个时候一定要选择创建,否者我们自己创建需要设置路径。
如果系统提示时未创建桥接文件或未提示,可以根据下面步骤创建桥接文件
创建一个Header File文件,一般命名为“项目名-Bridging-header”,内容清空,找到Build Settings搜索Objective-c Bridging header,将刚刚创建的桥接文件的路径添加到Objective-c Bridging header中,编译运行即可。
在创建的桥接头文件中包含想要被调用的OC类
- 1.3在swift文件中调用OC类
//在swift文件中调用OC类
let xx = testObject()
xx.seyHello()
//执行输出
2020-01-09 15:07:00.818634+0800 swift学习[1958:944082] seyHello-from Objective-C
2.ObjectiveC调用Swift
继承NSObject的swift类
import UIKit
class myswiftobj: NSObject {
@objc public func sayhello() {
NSLog("sayhello-from myswiftobj")
}
}
在OC中调用
#import <swift学习-Swift.h>
myswiftobj *x = [[myswiftobj alloc]init];
[x sayhello];
用Swift写的类,如果不继承NSObject或NSObject 的派生类,编译后将不会生成对应的转换类,从而使得OC 中找不到相应的声明。
可以进去看一下“工程名-Swift.h”文件,是自动生成了对应的OC代码