Colección de citas famosas - Slogan de motivación - ios OC, marco rápido de producción mixta

ios OC, marco rápido de producción mixta

Sigue el documento paso a paso.

Crea un nuevo proyecto de una sola página, luego crea un nuevo Target y selecciona Cocoa Touch Framework. Luego, cree un nuevo archivo Swift y una clase Objective C respectivamente. Tenga en cuenta que Target Member Ship selecciona Framework. El contenido de la clase es el siguiente:

OCSource.h

[Error en la carga de la imagen...(image-8dab68-1634619754604)]

OCSource. m

[Error en la carga de la imagen...(image-2c9071-1634619754604)]

Swift llama a OC

Crea un nuevo SwiftSource.swift

[Falló la carga de la imagen...(image-34eca8-1634619754604)]

Luego, según el documento, para que el archivo Swift acceda al archivo Objective C, debemos exponer lo que es necesario en el encabezado general, que es el encabezado MixFramework.h.

Es decir, MixFramework.h,

[Error en la carga de la imagen...(image-b166c3-1634619754604)]

Luego, haga clic en compilar con confianza.

Boom~~~, la compilación falló.

[Error en la carga de la imagen...(image-6ca763-1634619754604)]

Motivo: OCSource.h está compilado con permisos de Proyecto de forma predeterminada para poder usarlo en el paraguas. encabezado, debe cambiar los permisos de este archivo a Público

Simplemente arrástrelo como se muestra en la imagen.

[Error en la carga de la imagen...(image-f2d31d-1634619754604)]

Bueno, ahora compila, puedes ver que la compilación se realizó correctamente.

OC llama a Swift

En SwiftSource.swift, agrega una clase,

[Error en la carga de la imagen...(image-98ce8c-1634619754604)]

Luego, para llamar a los métodos Swift en OC, necesitamos importar el archivo de encabezado. En este momento, el contenido del archivo OCSource.m es el siguiente

[Error en la carga de la imagen. ...(image-f61fb3 -1634619754604)]

Luego, la construcción fue exitosa y quedé muy feliz.

Llamada externa

En ViewController.swift, llamamos al contenido en Framework.

[Error en la carga de la imagen...(image-6be19c-1634619754604)]

Luego ejecútelo y verá que la consola imprime

[Error en la carga de la imagen .. .(image-4b70-1634619754604)]

Bueno, el marco se empaquetó correctamente.

Problema

Por lo general, la interfaz que queremos exponer al exterior es Swift pura y la interfaz específica del archivo OC debe estar oculta. Este es el significado de la palabra elegancia. en mi título.

Si tiene curiosidad, encontrará que puede llamar a esto en ViewController.swift

[Error en la carga de la imagen...(image-fefccf-1634619754604)]

En otras palabras, el contenido de OC también queda expuesto, lo que destruye las características de encapsulación del Framework.

Al observar los resultados de la compilación de MixFramework, descubrí que la interfaz finalmente expuesta se veía así

[Error en la carga de la imagen...(image-8b0488-1634619754604)]

Esta línea expone la implementación correspondiente de OC

[Error en la carga de la imagen...(image-9c74a7-1634619754604)]

Solución elegante

Ya no permite que Swift en el marco llame a métodos OC a través del encabezado general. Pero a través de modulemap.

Crea un nuevo archivo module.modulemap con el siguiente contenido

[Error en la carga de la imagen...(image-633a91-1634619754604)]

[Carga de la imagen falló ..(image-d30f90-1634619754604)]

El #(SRCROOT) aquí es una macro XCode y se reemplazará automáticamente con el directorio raíz donde se encuentra el proyecto. ruta donde se encuentra el archivo module.modulemap.

Luego, elimine el encabezado #import OC en MixFramework.h (encabezado paraguas).

Cambie los permisos de OCSource.h nuevamente al proyecto predeterminado.

[Error en la carga de la imagen...(image-291cca-1634619754604)]

Compile nuevamente y descubra que la clase OC está oculta.