主要是做备忘
一、混编两种情况
- 在Objective-C项目中使用Swift
- 在Swift项目中使用Objective-C
1、在Objective-C项目中使用Swift
第一步:在Objective-C项目中,第一次创建Swift文件,会弹出下面弹窗
image
选择Create Bridging Header,系统会帮我们自动创建一个桥接文件,格式: 项目名-Bridging-Header.h,列如(SwiftDemo-Bridging-Header.h)。这个文件是Swift引用OC文件内容要用到的,后面会讲用法。
第二步:如图
image第三步:用法,在Objective-C项目或文件中使用Swift
image注意:先导入"SwitfDemo-Swift.h" 文件,格式("项目名-Swift.h") 必须先完成第二步的步骤,不然会找不到#import "SwitfDemo-Swift.h" 文件
坑点:
image
- oc中调用swift类的方法或者属性,必须加@objcMembers或者每个属性、方法前面加@objc,否则SwitfDemo-Swift.h 无法映射swift 的方法或属性,会出现报错提示找不到方法或者属性。在加上@objcMembers或@objc后还需要重新编译一遍才有提示,这也是很坑的地方
- swift中有些类型是oc中没有的,这样也映射不了。比如(swift中的Int可选类型,这时候OC是调不了swift的Int类型,解决方式,定义普通Int型)
- 有种特殊的情况,比如我一个OC控制器中调用了swift写的view,然后其他用swift写的控制器需要调用OC控制器,这时候要是只是把OC控制器写到桥接文件中是会报错的。(这种就是混编项目比较变态的情况)------------解决办法:swift写的View用向前声明( @class BannerView)
2、在Swift项目或文件中使用Objective-C
只需在桥接文件SwiftDemo-Bridging-Header.h中,将需要用到的OC 文件引入,如
#import "ViewController.h"
然后,该咋用咋用
oc项目中加Swift混编,会导致ipa包变大。如(+12M、+1/2M),最好纯一种语言写。
网友评论