swift 和 oc 混编 以及遇到的坑

一. 在swift中调用oc.

  1. 创建名为项目名+Bridging-Header.h的文件,注意名称一定要一模一样。

  2. Build Settings->Objective-C Bridging Header中指定路径。若是自动创建的,系统已经给你生成好了,否则就要自己添加目录了。

  3. 在桥接文件中导入要使用的.h文件,如图:
    image.png
  4. 注意若提示无法找到文件,则检查是否已经关联到swift项目的target上:
  5. 在swift中调用oc中的Category类方法编译不通过的问题:就是在NSString+Helper.h中定义了一个类方法,但转换的时候Swift自动转换成了init方法,with前面的省略,with后面的作为参数:


    如上图,编译器在转换时自动将方法转换成了:

  convenience init(text: String?)

所以调用的时候,如果显示不出方法来,可以这么调用:

  let str = NSString.init(text: "")

二. 在oc中调用swift.

  1. 在swift的代码要能被oc调用,其定义的类要继承自NSObject,函数要用@objc定义。或者在类的开头用@objcMembers修饰,这样类的所有属性和方法都能被oc访问。如下图:
  1. xcode已经默认生成一个用于OC调用Swift的头文件,文件名格式是:Target名称-Swift.h
  1. 在oc的代码中导入这个文件,在相应的方法中调用swift的代码。

你可能感兴趣的:(swift 和 oc 混编 以及遇到的坑)