Swift y Objective-C se llaman (resumen)

La empresa ha utilizado oficialmente el lenguaje swift para desarrollar proyectos durante más de un año, y ahora resume la experiencia de swift y OC llamándose entre sí.

llamadas rápidas OC

  • Swift llama a la clase OC, debe tener un archivo puente e importar el archivo .h de la clase OC en el archivo puente.
1. Crea un "工程名称"-Bridging-Header.harchivo
  • Al crear un nuevo proyecto, se le pedirá automáticamente que cree un archivo puente SwiftTestProject (nombre del proyecto)-Bridging-Header.h, este archivo es necesario para que Swift llame a OC.

Crear archivo puente

  • Si el nuevo proyecto no está marcado para crear un -Bridging - Header.harchivo, debe crear un archivo manualmente "工程名称"-Bridging-Header.h, crear un archivo de encabezado, generalmente llamado como “项目名-Bridging-header”, vaciar el contenido

  • Luego configure en el proyecto: TARGET -> Build Settings -> Objective-C Bridging Headercomplete su nombre de archivo:"工程名称"-Bridging-Header.h

  • TARGETS --> Build settingsBusque el medio de Defines Modulebúsqueda en el archivo del proyecto y configúrelo enYES

2. Al introducir el archivo de encabezado .h de OC, la clase OC relativa se puede llamar en el proyecto Swift.

oc llama rápido

1. Configuración del proyecto

Encuentre la TARGETS -->Build settingsbúsqueda central debajo del archivo del proyecto Product Module Namey configúrelo con el nombre del proyecto, luego el proyecto creará automáticamente un "项目名"-Swift.harchivo, el proyecto es "SwiftTestProject-Swift.h", este archivo se usa para que oc llame al archivo swift, y no se muestra de forma predeterminada.

2. Importar "项目名"-Swift.harchivos

En el archivo OC #import "项目名称-Swift.h", tenga en cuenta que no hay un aviso en este archivo, debe escribirlo manualmente y luego puede usar la clase rápida en la clase OC.

Notas y Resumen

  • oc se refiere al archivo swift para referirse al archivo "nombre del proyecto-Swift.h", debe escribir manualmente, sin aviso, swift se refiere al archivo oc para crear un archivo puente, y se hace referencia al archivo .h de oc en el archivo puente.

  • Tenga en cuenta que OC llama a swift, las clases en swfit deben prestar atención,

- 特别注意 OC调用Swift中的Class类

  1. 这个类必须是继承NSObjec或者NSObjec的子类
  2. Class前面要加@objcMembers (这个关键字是让该类所有属性和方法加上@objc),3.0之前是苹果自动帮你加上的,据说嫌弃打包会偏大一些,后面改成自己手动加。 例如:
@objcMembers class CustomServiceTool: NSObject {}

复制代码
  1. 类中的协议、枚举、结构体这些东西的调用
  • 协议:直接在前面加一个@objc
@objc protocol CustomServiceToolDelegate: NSObjectProtocol {}

复制代码
  • 枚举:必须定义出Int类型,前面加@objc才能调用(毕竟swift的枚举比OC强大太多)
@objc enum CPLineType: Int {
case schoolToHome = 0
case homeToSchool
case return
}

复制代码
  • 结构体:在oc中是不能调用struct里面的内容的,你想在类似class前面加个@objc的方法加在struct前面是不行的,那但是我们又想在oc中调用struct的属性,那怎么办呢?我们只能再建一个类,在类里写个方法来返回struct中的值

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发交流群:130 595 548,不管你是小白还是大牛都欢迎入驻 ,让我们一起进步,共同发展!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)

坑点:

  1. 每次在一个类前面加个@objcMembers的时候都需要重新编译一遍才能打出提示(混编期间,报错请不要怀疑自己的代码,大部分编译一下就没事了。。。)

  2. 有种特殊的情况,比如我一个OC控制器中调用了swift写的view,然后其他用swift写的控制器需要调用OC控制器,这时候要是只是把OC控制器写到桥接文件中是会报错的。(这种就是混编项目比较变态的情况)------------解决办法:swift写的View用向前声明( @class BannerView);

  3. swift中的一些类型是OC没有的,或者类型名字差不多但是类型完全不同 例如: swift中的Int定义成可选类型的时候,这时候OC是调不了swift的Int类型,解决方式,定义普通Int型

Supongo que te gusta

Origin juejin.im/post/6956467380604436494
Recomendado
Clasificación