Integración de Swift con Objective-C
Aprenda a hacer que el código Swift sea accesible desde Objective-C mediante el encabezado Objective-C generado automáticamente.
Integración de Swift con Objective-C es una lección gratuita de Objective-C iOS Development for Legacy & Enterprise Apps en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Objective-C iOS Development for Legacy & Enterprise Apps, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Objective-C iOS Development for Legacy & Enterprise Apps incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
Swift to Obj-C: The Bridge
Welcome! In mixed-language projects, you often need Swift code to talk to Objective-C code. This lesson focuses on making your modern Swift classes and methods accessible to older Objective-C files.
This "bridging" allows you to gradually introduce Swift into an existing Objective-C codebase or have parts of your app written in different languages.
The Auto-Generated Header
When you add Swift files to an Objective-C project, Xcode automatically generates a special header file for you. It's named ProductModuleName-Swift.h.
This header acts as a translator, exposing your Swift code to the Objective-C world. You don't create it; Xcode does all the work! You just need to import it.
Exposing Swift Classes
For an Objective-C file to "see" a Swift class, that Swift class must inherit from NSObject. This is a fundamental requirement for Objective-C compatibility.
Without inheriting from NSObject, your Swift class won't appear in the auto-generated bridging header.
Using @objc for Visibility
The @objc attribute explicitly marks a Swift declaration (class, method, property, initializer) as available to Objective-C.
- Classes that inherit from
NSObjectand are notfinalautomatically expose their members. - You might need
@objcfor specific members if your class doesn't inherit fromNSObject(e.g., via a protocol) or for properties/methods that require KVC/KVO compatibility.
A Simple Swift Class
Here's a Swift class, MySwiftGreeter, that inherits from NSObject. Its name property and greet() method will be automatically exposed to Objective-C.
We can optionally use @objc(MySwiftGreeter) to specify the Objective-C name, though it's often inferred.
import Foundation
class MySwiftGreeter: NSObject {
@objc var name: String
@objc init(name: String) {
self.name = name
super.init()
}
@objc func greet() -> String {
return "Hello from Swift, \(name)!"
}
}Importing the Swift Header
To use your Swift classes in an Objective-C file, you simply need to import the auto-generated bridging header. Replace ProductModuleName with your project's actual module name.
This import should be in your Objective-C .m implementation file, not in a .h header file, to avoid circular dependencies and unnecessary exposure.
// In MyObjectiveCFile.m
#import "YourProjectName-Swift.h"
// Now you can use MySwiftGreeter
// ...Using Swift in Obj-C
Once the bridging header is imported, your Objective-C code can create instances of Swift classes and interact with their exposed properties and methods, just like any other Objective-C object.
Note: This code snippet shows how it would look in a project. Running it directly requires a full Xcode project setup with both Swift and Objective-C files.
#import <Foundation/Foundation.h>
#import "MyProjectName-Swift.h" // Your project's auto-generated header
int main(int argc, const char * argv[]) {
@autoreleasepool {
// Create an instance of the Swift class
MySwiftGreeter *greeter = [[MySwiftGreeter alloc] initWithName:@"Coddy"];
// Call a method on the Swift object
NSString *greeting = [greeter greet];
NSLog(@"%@", greeting);
// Access a property
NSLog(@"Greeter's name: %@", greeter.name);
}
return 0;
}Swift & Obj-C Type Map
When bridging, Swift types are automatically mapped to their closest Objective-C equivalents:
- Swift
Stringmaps toNSString* - Swift
Int,Double,Boolmap toNSNumber* - Swift
Arraymaps toNSArray* - Swift
Dictionarymaps toNSDictionary*
This allows seamless data exchange between the two languages.
Customizing Obj-C Names
Sometimes, Swift's inferred Objective-C name for a class or method might not be ideal, or it might conflict. You can provide a custom Objective-C name using @objc(NewName).
This is especially useful if you need to match existing Objective-C naming conventions or avoid clashes with existing Objective-C symbols.
import Foundation
@objc(LegacyGreeter) // Renames MySwiftGreeter to LegacyGreeter for Obj-C
class MySwiftGreeter: NSObject {
@objc var name: String
@objc(initWithPersonName:) // Custom name for initializer
init(name: String) {
self.name = name
super.init()
}
@objc(sayHello) // Custom name for method
func greet() -> String {
return "Hello from Swift, \(name)!"
}
}Bridging Limitations
Not all Swift features can be directly exposed to Objective-C. Keep these limitations in mind:
- Swift Structs & Enums: Unless they have raw values and conform to
@objc, they aren't directly visible. - Generics: Swift generics are not exposed.
- Global Functions: Only methods within
NSObject-derived classes are bridged. - Tuples: Swift tuples have no Objective-C equivalent.
Focus on classes, methods, and properties that mirror Objective-C's object model.
Bridging Knowledge Check
Which of the following is REQUIRED for a Swift class to be accessible from Objective-C code via the auto-generated bridging header?
Bridging Swift to Obj-C
You've learned how to make your Swift code available to Objective-C! Key takeaways:
- Xcode generates a
ProductModuleName-Swift.hheader. - Swift classes must inherit from
NSObjectto be seen by Objective-C. - The
@objcattribute explicitly exposes members or renames them. - Swift types like
String,Array, andDictionaryare automatically mapped to theirNScounterparts.
This bridging is crucial for maintaining and evolving mixed-language iOS projects!
Aprende Objective-C con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 12
- Lecciones
- 48
Preguntas frecuentes
¿La lección «Integración de Swift con Objective-C» es gratis?
Sí — el texto completo de «Integración de Swift con Objective-C» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Objective-C iOS Development for Legacy & Enterprise Apps, actualiza a CoddyKit PRO. El curso de Objective-C iOS Development for Legacy & Enterprise Apps incluye 4 lecciones en total.
¿Qué aprenderé en «Integración de Swift con Objective-C»?
Aprenda a hacer que el código Swift sea accesible desde Objective-C mediante el encabezado Objective-C generado automáticamente. Practicas Objective-C iOS Development for Legacy & Enterprise Apps con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Objective-C iOS Development for Legacy & Enterprise Apps?
No se requiere experiencia previa. Objective-C iOS Development for Legacy & Enterprise Apps en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Integración de Swift con Objective-C»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Objective-C iOS Development for Legacy & Enterprise Apps?
Sí. Cada lección de Objective-C iOS Development for Legacy & Enterprise Apps incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Integración de Objective-C con Swift
- Integración de Swift con Objective-C
- Creación de frameworks Objective-C
- Gestión de nulabilidad y mapeo de tipos entre lenguajes