工作中用到的好技术

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;
}
上一篇下一篇

猜你喜欢

热点阅读