美文网首页
Swift和Objective-C相互调用

Swift和Objective-C相互调用

作者: Pandakingli | 来源:发表于2020-01-09 16:21 被阅读0次

    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文件

    相关文章

      网友评论

          本文标题:Swift和Objective-C相互调用

          本文链接:https://www.haomeiwen.com/subject/rtvyactx.html