前言
在Framework
的开发中,难免会遇到OC与Swift混编的情况;
一、OC调用Swift
1. 定义要被调用的Swift
类与方法;
- 该类必须是集成于
OC
的类 - 该类必须使用
public
修饰 - 被调用的方法,必须使用
@objc
修饰 - 被调用的方法,必须使用
public
修饰
import Foundation
public class SwiftObject: NSObject {
@objc public func callOC() {
print("======")
}
}
2.OC调用Swift类
#import "FirstObject.h"
// 引入头
#import <First/First-Swift.h>
@implementation FirstObject
- (void)callSwift
{
// 直接调用Swift类
SwiftObject *test = [[SwiftObject alloc] init];
[test callOC];
}
@end
二、Swift调用OC
在工程中,Swift如果想调用OC,需要建立一个桥接文件;同理,在
Framework
中也一样,需要创建一个桥接文件
- 创建一个
module.modulemap
文件 - 在
module.modulemap
文件中,引入需要调用的类
module JiuWuVisitorSwift {
header "OCObject.h"
export *
}
这里
header
中,引入的是OCObject.h
相对于module.modulemap
的路径
-
配置
module.modulemap
的路径
在TARGETS->Build Settings->Swift Compiler - Search Paths-> Import Paths
下添加module.modulemap
所在的文件夹的路径
"${SRCROOT}/First"
-
在Swift中调用OC类
import Foundation
// 引入转接文件
import FirstSwift
public class SwiftObject: NSObject {
@objc public func callOC() {
// 调用oc类
let test = OCObject()
test.test()
}
}
如果
Framework
中包含Swift
,并且把Framework
编译成静态库,可能会报一下错误;
解决办法:在主工程中创建一个空的Swift文件;
网友评论