Swift学习之OC-Swift互调

949 阅读1分钟

swift调用oc

**1、**当我们在swift项目中新建一个oc类的时候,xcode会提示我们要不要同时创建桥接文件,我们点创建,xcode会帮我们自动创建一个桥接文件,文件名格式默认为:{targetName}-Bridging-Header.h。targetName为当前项目的target的名称。

我们也可以自己手动去创建这个文件,并指定路径就好,这个时候上面的targetName就可以随便起了

**2、**在桥接文件中引入OC需要暴露给Swift的文件或者库,这样在swift文件中就可以访问了。

oc调用swift

**1、**在swift的代码要能被oc调用,其定义的类要继承自NSObject,函数要用@objc定义。或者在类的开头用@objcMembers修饰,这样类的所有属性和方法都能被oc访问。如下图:

**2、**首先设置一下Packing,进入TARGETS ->Build Settings -> Packaging 中,设置DefinesModule为YES,设置 Product Module Name (这个也可以不设置,直接使用默认就行)。xcode已经默认生成一个用于OC调用Swift的头文件,文件名格式是:{targetName}-Swift.h,targetName为当前项目的target的名称。

**3、**在oc的代码中导入这个文件,在相应的方法中调用swift的代码。

4、为啥被oc访问的swift的类要继承自NSObject?因为在oc中的类是依赖runtime机制的,而runtime机制需要isa指针,只有继承NSObject才能获得isa指针。