swift项目集成OC并互相调用
2021-12-29 本文已影响0人
万年老参
本篇文章用例:
新建APP项目,选择语言swift;集成OC的SDK,其中sdk中有引入“appdelegate.h”
一,swift项目混编OC
通过Xcode在项目中创建OC语法的Class,Xcode会自动生成桥接文件“项目名-Bridging-Header.h”。 截屏2021-12-30 下午5.23.15.png 手动创建同命名规则的.h文件并配置应该也可以(未验证)然后在桥接文件中引入OC的头文件,在Swift代码中就可以调用OC方法了(部分方法名因为语法不同的原因可能会有些许改变)。
//创建一个OC类,并声明几个方法用于测试
@interface OCLog : NSObject
+ (OCLog *)sharedOCLog;
-(void)smartLog:(NSString *)logString;
@end
在Swift中的调用:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let testLog = OCLog.shared();//这里定位方法其实是定位到sharedOCLog,方法名略有不同原因还未知。
testLog.smartLog("123123");
}
}
二,swift项目中的OC代码里需要调用Swift代码:
1,配置OC使用的桥接文件,配置完成后Xcode配置后会自动生成此文件,文件存在于Xcode的编译缓存路径下,(在项目目录中不显示。可以在代码中引用的地方定位到此文件内容,空白处右键鼠标,show in finder查看此文件位置) 配置OC使用的桥接文件2,对需要提供给OC调用的方法,属性,添加@objc关键字
如果没添加@objc关键字则在OC代码里面找不到对应方法。
@objc class func appDelegate() -> AppDelegate{
return UIApplication.shared.delegate as! AppDelegate
}
3,在oc代码中调用swift代码
1,需要调用swift代码的地方导入桥接文件:#import "SwiftAddOCTest-Swift.h" ,
2,若集成第三方SDK,里面比如import "AppDelegate.h"之类的引用,则删掉,并导入桥接文件
#import "OCLog.h"
#import "SwiftAddOCTest-Swift.h" //引用桥接文件,command+鼠标左键可以查看桥接文件并定位文件位置
@implementation OCLog
-(AppDelegate *)testSelect
{
AppDelegate *appde = AppDelegate.appDelegate;//调用swift代码。
return appde;
}