ObjectiveC和Swift的相互调用

一.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()

整个调用过程如下图所示:​


ObjectiveC和Swift的相互调用_第1张图片

二.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方法

整个调用过程如下图所示: 


ObjectiveC和Swift的相互调用_第2张图片



注意事项:

OC项目引入使用swift编写的三方库后报错的话

解决办法: 

选中Pods项目

TARGETS选择对应的使用swift编写的三方库

切换到Build Setting选项

在搜索框输入swift language搜索

将Swift Language Version中的Unspecified改为对应的Swift版本(Swift 3.2) ,或者使用legacy version。

重新build项目,这是可能会报一些Swift的语法错误,修改一下就OK了。

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