Swift和Objective-C相互调用

1.Swift调用ObjectiveC

  • 1.1创建OC类
//testObject.h文件
#import 

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
创建OC类
  • 1.2创建桥接文件

在Swift工程内想要调用OC是相对比较容易的,只需在桥接文件中导入想要调用的OC类即可。
当在Swift工程中创建完成OC类的时候,系统会提示我们是否创建桥接文件,这个时候一定要选择创建,否者我们自己创建需要设置路径。

如果系统提示时未创建桥接文件或未提示,可以根据下面步骤创建桥接文件
创建一个Header File文件,一般命名为“项目名-Bridging-header”,内容清空,找到Build Settings搜索Objective-c Bridging header,将刚刚创建的桥接文件的路径添加到Objective-c Bridging header中,编译运行即可。

Swift和Objective-C相互调用_第1张图片
创建桥接文件
Swift和Objective-C相互调用_第2张图片
桥接文件

在创建的桥接头文件中包含想要被调用的OC类


Swift和Objective-C相互调用_第3张图片
桥接文件中引入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

Swift和Objective-C相互调用_第4张图片
设置Product Module Name
Swift和Objective-C相互调用_第5张图片
设置Defines Module

继承NSObject的swift类

import UIKit

class myswiftobj: NSObject {
    
 @objc public func sayhello() {
        NSLog("sayhello-from myswiftobj")
    }
    
}

在OC中调用

#import 

    myswiftobj *x = [[myswiftobj alloc]init];
    [x sayhello];

用Swift写的类,如果不继承NSObject或NSObject 的派生类,编译后将不会生成对应的转换类,从而使得OC 中找不到相应的声明。
可以进去看一下“工程名-Swift.h”文件,是自动生成了对应的OC代码


Swift和Objective-C相互调用_第6张图片
swift学习-Swift.h文件

你可能感兴趣的:(Swift和Objective-C相互调用)