Cómo llamar código Objective-C desde Swift: amistad de lenguajes en iOS

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Objective-C y Swift: dos mundos, un proyecto

\n\n

¿Escribes en Swift, pero tienes a tu disposición una biblioteca escrita en Objective-C, o código antiguo pero probado en ObjC? ¿Una situación familiar? No te preocupes: Apple ha previsto un excelente mecanismo para que estos dos lenguajes trabajen juntos. En este artículo, analizaremos cómo llamar código Objective-C desde Swift: rápido, simple y sin dolor de cabeza.

\n\n

Esta pregunta es una de las más populares en Stack Overflow (miles de visitas y cientos de votos). Y con razón: saber integrar Objective-C en Swift abre el acceso a un enorme legado de bibliotecas y código escritos durante décadas de desarrollo de iOS. Finalmente, entendamos cómo funciona.

\n\n

¿Qué es el Bridging Header y para qué sirve?

\n\n

El secreto de la amistad entre Swift y Objective-C es un archivo especial llamado Bridging Header (cabecera puente). Es como un traductor: le indica a Swift qué clases y funciones de Objective-C están disponibles y cómo llamarlas correctamente.

\n\n

Cuando creas un archivo puente, el compilador lo recoge automáticamente y hace visibles todas las declaraciones de Objective-C en Swift. Simplemente importas los encabezados de ObjC en este archivo y listo.

\n\n

Cómo crear un Bridging Header en Xcode

\n\n

La forma más sencilla es dejar que Xcode lo haga por ti. Simplemente agrega un nuevo archivo Objective-C a tu proyecto (File → New → File → Objective-C File). Xcode preguntará: "¿Quieres crear un Bridging Header?" — responde "Sí". Después de eso, aparecerá en el proyecto un archivo con el nombre YourProjectName-Bridging-Header.h.

\n\n

Si ya estás trabajando en un proyecto y quieres agregar el puente manualmente, haz lo siguiente:

\n\n
    \n
  • Crea un nuevo archivo de encabezado (File → New → File → Header File) y nómbralo, por ejemplo, MyProject-Bridging-Header.h.
  • \n
  • En la configuración del proyecto (Build Settings), busca el parámetro Objective-C Bridging Header e indica la ruta a tu archivo.
  • \n
\n\n

Listo. Ahora, todo lo que escribas en este archivo estará disponible en Swift.

\n\n

Escribimos una clase Objective-C y la conectamos a Swift

\n\n

Vamos a crear una clase simple en Objective-C que salude al usuario. Primero, el archivo de encabezado (Greeter.h):

\n\n
// Greeter.h\n#import <Foundation/Foundation.h>\n\n@interface Greeter : NSObject\n\n- (NSString *)greetWithName:(NSString *)name;\n\n@end\n
\n\n

Y ahora, la implementación (Greeter.m):

\n\n
// Greeter.m\n#import "Greeter.h"\n\n@implementation Greeter\n\n- (NSString *)greetWithName:(NSString *)name {\n    return [NSString stringWithFormat:@"¡Hola, %@! Encantado de conocerte.", name];\n}\n\n@end\n
\n\n

Ahora, lo más importante. Abre tu Bridging Header (por ejemplo, MyProject-Bridging-Header.h) y agrega lo siguiente:

\n\n
// MyProject-Bridging-Header.h\n#import "Greeter.h"\n
\n\n

¡Listo! Ahora puedes usar la clase Greeter en Swift como si estuviera escrita en Swift:

\n\n
// ViewController.swift\nimport UIKit\n\nclass ViewController: UIViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        let greeter = Greeter()\n        let message = greeter.greet(withName: "Alejandro")\n        print(message) // Imprimirá: "¡Hola, Alejandro! Encantado de conocerte."\n    }\n}\n
\n\n

Observa: el método greetWithName: en Swift se transforma en greet(withName:). Esta es una adaptación automática de los nombres de métodos de Objective-C al estilo Swift.

\n\n

Trabajo con frameworks y bibliotecas Objective-C

\n\n

A menudo necesitas conectar no tu propio código, sino una biblioteca ya hecha en Objective-C (por ejemplo, una versión antigua de AFNetworking o CocoaLumberjack). Aquí es aún más simple:

\n\n
    \n
  • Instala la biblioteca mediante CocoaPods, Carthage o SPM.
  • \n
  • Importa sus encabezados en tu Bridging Header.
  • \n
  • Usa
  • \n

Blogs

Book Recommendations