美文网首页
OC和Swift 混编

OC和Swift 混编

作者: 洱舟 | 来源:发表于2018-12-14 18:01 被阅读4次

    主要是做备忘

    一、混编两种情况

    • 在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" 文件

    坑点:

    1. oc中调用swift类的方法或者属性,必须加@objcMembers或者每个属性、方法前面加@objc,否则SwitfDemo-Swift.h 无法映射swift 的方法或属性,会出现报错提示找不到方法或者属性。在加上@objcMembers或@objc后还需要重新编译一遍才有提示,这也是很坑的地方
    2. swift中有些类型是oc中没有的,这样也映射不了。比如(swift中的Int可选类型,这时候OC是调不了swift的Int类型,解决方式,定义普通Int型)
    3. 有种特殊的情况,比如我一个OC控制器中调用了swift写的view,然后其他用swift写的控制器需要调用OC控制器,这时候要是只是把OC控制器写到桥接文件中是会报错的。(这种就是混编项目比较变态的情况)------------解决办法:swift写的View用向前声明( @class BannerView)
    image

    2、在Swift项目或文件中使用Objective-C

    只需在桥接文件SwiftDemo-Bridging-Header.h中,将需要用到的OC 文件引入,如

    #import "ViewController.h"
    

    然后,该咋用咋用

    oc项目中加Swift混编,会导致ipa包变大。如(+12M、+1/2M),最好纯一种语言写。

    相关文章

      网友评论

          本文标题:OC和Swift 混编

          本文链接:https://www.haomeiwen.com/subject/ufzghqtx.html