一:引入swift的三方库,这里以SignalArgon2为例。
1、首先需要打开Podfile文件,添加ENV['SWIFT_VERSION'] = '要用的swift版本号' 和 use_frameworks! 如下图
2、保存Podfile文件,pod install更新即可。此时打开项目就能看见导入的swift库SignalArgon2了。
二:在OC代码里面使用引用的SignalArgon2三方库
1、创建一个swift文件TextOCAndSwift.swift,跟创建OC文件一样,只不过语言选择swift。
2、此时会生成一个 TestOC-Bridging-Header.h 文件,TestOC是你的项目名称,在这个文件里面引用SignalArgon2头文件,注意要用swfit语法
@import SignalArgon2;
3、在TextOCAndSwift 里面写一个供OC调用的方法,然后在这个方法里面调用SignalArgon2的方法。
// 供OC调用
@objc func ocCallMethod(_ data: String) -> String {
// 调用SignalArgon2方法
let (rawHash, encodedHash) = try! Argon2.hash(
iterations: 1,
memoryInKiB: 10 * 1024,
threads: 1,
password: "password".data(using: .utf8)!,
salt: "salt".data(using: .utf8)!,
desiredLength: 32,
variant: .i,
version: .v10
)
// 将调用SignalArgon2方法的结果通过ocCallMethod返回OC
return encodedHash;
}
4、在你要使用SignalArgon2的OC文件里面引用TestOC-Swift.h,这个文件也是系统生成的,TestOC替换成你的项目名称,然后就可以调用TextOCAndSwift的方法了。
#import "TestOC-Swift.h"
TextOCAndSwift *test = [[TextOCAndSwift alloc] init];
// 调用TextOCAndSwift的ocCallMethod方法,并拿到返回的结果
NSString *string = [test ocCallMethod:@"ocCallMethod成功"];
NSLog(@"ocCallMethodReturn==%@",string);
5、到这里,通过架桥,就可以在OC里面调用swift三方库里面的方法了
三:OC调用swift 补充
1、swift里面声明供OC使用的方法,需要在方法最前面加上 @objc,如果写的方法过多,不想在每个方法前面都写,直接在swift类前面加上@objcMembers 就可以了。
@objcMembers class TextOCAndSwift: NSObject {}
2、func ocCallMethod(_ data: String) -> String {} 参数解释
ocCallMethod 方法名称
data 传入的参数名称
String 传入的参数类型
-> 表示方法有返回值
String 返回值类型
data 前面 _ 加_OC调用时方法明不需要带data,具体如下:
// 有_
func ocCallMethod(_ data: String, ) {}
// 对应OC调用
[test ocCallMethod:@""];
// 没有_
func ocCallMethod(data: String, ) {}
// 对应OC调用
[test ocCallMethodWithData:@""];
3、多参数
// swift 对应声明
func ocCallMethod(data: String, pass: String) {}
// OC 对应调用
[test ocCallMethodWithData:@"" pass:@""];
网友评论