Swift和Objective-C相互调用

早过忘川 提交于 2020-01-25 05:20:02

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

创建OC类

  • 1.2创建桥接文件

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

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

创建桥接文件

桥接文件
在创建的桥接头文件中包含想要被调用的OC类
桥接文件中引入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

设置Product Module Name

设置Defines Module

继承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代码
swift学习-Swift.h文件

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!