oc与Swift混编

1、要想在oc 类中调用 Swift的类
首先要在 pch文件中添加Swift的关联

oc与Swift混编_第1张图片
机智的少年.png

其次,就是代码调用了。在oc代码中,我用的是反射机制。

 NSString *className = @"ViewController";
 NSString * aName = [NSBundle mainBundle].spaceName;// spaceName 
 className = [NSString stringWithFormat:@"%@.%@",aName,className];
   UIViewController *Vc = [[NSClassFromString(className) alloc] init];
        [appDelegate.mainNavigationController pushViewController:Vc animated:NO];

/// 获取项目名(命名空间)
extension Bundle {
    
    var spaceName: String {
        
        return infoDictionary?["CFBundleName"] as? String ?? ""
    }
}

2、在Swift中调用oc的方法,需要添加 一个桥接文件,其实就是创建一个头文件,怎么创建这里就不细说了,有一点需要注意,更改路径如图二。
 进入TARGETS ->Build Settings -> Packaging 中
创建桥接文件相关资料:http://www.jianshu.com/p/7c941d274f5a

设置Defines Module为YES(不设置,也可以,我之前的项目也是没有设置)
设置 Product Module Name ,也可以不设置,默认为工程的名字。这个在后面会用到

命名规则:项目名+“-Bridging-Header”,一般放在根目录下,如图一:


oc与Swift混编_第2张图片
图一.png
oc与Swift混编_第3张图片
图二.png

其次,在桥接文件中 导入 你需要使用的 oc头文件。
最后,用点语法,类名.方法。就可以了。

 AppUtils.clearAllData() // AppUtils是类名,clearAllData是方法名

你可能感兴趣的:(oc与Swift混编)