Swift 与 Objective-C 混编

一、同一个 Target 中:

Language Import into Swift Import Into Objective-C
Swift - #import "ProductModuleName-Swift.h"
Objective-C Objective-C 桥接文件 #import "Header.h"
  • 桥接文件ProjectName-Bridging-Header.h,这个文件主要是Swift使用OC类时使用。在首次创建其他文件时,会自动生成。如果不小心删除了,可手动新建Header file后,在Targets --> Build Settings --> Swift Compiler - General --> Objective-C Bridging Header配置文件路径。
  • ProductModuleName-Swift.h是系统生成的Swift文件对应的Objective-C的头文件,可在Targets --> Build Settings --> Swift Compiler - General --> Objective-C Generated Interface Header Name进行配置,一般不做改动。当在OC文件中调用Swift文件中的类时,首先在OC文件中要加上 #import "ProjectName-swift.h”

二、同一个 framework 内

Language Import into Swift Import Into Objective-C
Swift - #import <ProductName/ProductModuleName-Swift.h>
Objective-C Objective-C umbrella header #import "Header.h"
  • Objective-C umbrella header是 Objective-C代码引入Swift使用时的头文件,名为ProductModule-umbrella.h,使用流程如下:
    1)编写Objective-C代码
    2)设置Objective-C类的.h文件为public(一般来说默认就是public的,如下图)
    设置Objective-C类的.h文件为public.png

    3)在示例程序中pod install之后,会在ProductModule-umbrella.h文件中自动导入Objective-C的.h文件

三、导入外部的 Frameworks

Language Import into Swift Import Into Objective-C
Any language framework import FrameworkName @import FrameworkName;

四、注意事项

  • 需要混编的Swift类需继承自NSObject或NSObject的子类,并使用public加以声明,否则ProductName-Swift.h中不会自动生成对应的声明;
  • 需要混编的Swift类的属性或方法需同时用@objc、public修饰,否则ProductName-Swift.h中不会自动生成对应的声明。

参考:
1、Swift 与 Objective-C 混编

推荐阅读更多精彩内容