混编分为两种情况:
1.在Swift工程中使用Objective-C文件
2.在Objective-C工程中使用Swift的文件
Swift中访问OC文件:
1. 添加桥接文件projectName-Bridging-Header.h
桥接文件“ProjectName-Bridging-Header.h”,在首次创建其他文件的时候,会自动生成。如果不小心删除后,也可以手动添加,不过名字必须是“ProjectName-Bridging-Header.h”头文件(名称组成:工程名-Bridging-Header.h)。
在Targets->Bulid Setting,然后搜索Swift,选择Swift Compiler-General下Objective-C Bridging Header,然后配置文件路径。
2.添加引用
Swift中使用OC文件的时候只需要在桥接文件projectName-Bridging-Header.h中引入需要的头文件。
我们项目中对应的桥接文件为:X5mgc-Bridging-Header.h
这样就可以在.Swift文件中访问OC的类了,如下:
注意点:
1、使用第三方Framework
设置: target-->build setting -->Packaging -->Defines Module为 “Yes”;
然后,配置文件Target -> Build Phases -> Link Binary,添加要导入的Framework;
最后,还是要配置桥接文件,比如要使用 abc-lib.framework库中的 abc.h 就要这样配置:#import"abc-lib/abc.h";
2、OC宏文件
Swift中没有宏,可以使用全局常量、全局函数代替部分宏问价
Swift中是不能使用宏定义语法,但是因为命名空间的缘故,在其中,我们将原本oc中不需要接受参数的宏,定义成let常量或枚举,将需要接受参数的宏定义成函数。
OC中访问Swift类:
1、首先我们创建一个OC项目,然后再OC项目中创建一个Swift类,如下:
如果你是第一次在工程中创建 Swift 类,工程会提示你是否需要创建 Objective-C bridging header,这个就是所谓的桥接文件。点击 Create Bridging Header,此时会在你的工程中多出一个文件(文件命名规则是:工程名-Bridging-Header.h)
2、在OC类中引用刚才创建的Swift类
在想要调用Swift代码的类中导入Swift头文件,这个是固定的写法(规则是:工程名-Swift.h),然后就可以调用我们刚才的 Swift 代码了。
注意点:
1、工程名-Swift.h这个文件虽然看不到,但是它是真是存在的,编译后,你可以按住Command+单击该文件名,就会看到具体生成的代码。
2、对于需要混编的Swift类需要添加@objc声明或者继承NSObject或者是NSObject的子类。否则,引入 工程名-Swift.h之后,程序找不到对应类。
3、直接拖动对应的Swift文件到工程的话,好像直接拖动添加.swift文件到工程Xcode不会添加到编译列表中,因此要注意检查拖动的文件是否添加到了build phase的编译列表中。
4、OC项目混编Swift的时候,如果项目没有自动生成桥接文件(ProductName-Bridging-Header.h),那么你一定要自己创建并配置好路径。因为:没有桥接文件会影响到你的Swift转OC接口文件(ProductName-Swift.h)中Swift要暴露给OC生成的接口。
5、Swift中有许多OC没有的特性,比如,Swift有元组、泛型、定义的结构体、还有特有的枚举类型。所以,要使用的混编文件要注意Swift独有属性问题。