0Pricing
Swift Academy · Lección

Interoperabilidad con C/Obj-C de un vistazo (sin aspectos específicos de iOS)

Importe módulos del sistema de C, llame a API POSIX/C sencillas y use puentes de Foundation (String/NSString, arrays/dictionaries). Vea cómo NSError** de Objective-C se convierte en throws de Swift.

Interoperabilidad con C/Obj-C de un vistazo (sin aspectos específicos de iOS) es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 2 de 3. 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 Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 3 lecciones en total.

Mapa de interoperabilidad

Este es un breve recorrido por la interoperabilidad:

  • C: importe módulos del sistema y llame a utilidades POSIX
  • Foundation: puentes de String/NSArray/NSDictionary
  • NSError → throws de Swift

Imports y punteros de C

Swift puede llamar directamente a muchas API de C. Use imports condicionales para facilitar la portabilidad y convierta char* con String(cString:).

// Import the platform C module: Darwin (Apple) or Glibc (Linux)
#if canImport(Darwin)
import Darwin
#else
import Glibc
#endif

// Use C getenv (returns C pointer) and strlen
if let cPtr = getenv("USER") {
    let name = String(cString: cPtr)   // bridge C char* -> Swift String
    print("Hello,", name)
} else {
    print("Hello, anonymous")
}

// strlen works on C strings:
let cString: [CChar] = Array("swift".utf8).map { CChar($0) } + [0]
let len = strlen(cString)
print("strlen(s) =", len)

Ejemplo de aleatoriedad en C

Llame a funciones de C de la plataforma (por ejemplo, arc4random_uniform en Apple y random() en Linux). Mantenga los ejemplos pequeños y portables.

#if canImport(Darwin)
import Darwin
let r = arc4random_uniform(100)      // 0..99
print("random:", r)
#else
import Glibc
let r = UInt32(random() % 100)       // 0..99 (demo)
print("random:", r)
#endif

Puentes de Foundation

Los tipos de Foundation se conectan de forma natural: String⇄NSString, [Any]⇄NSArray, [Key:Any]⇄NSDictionary.

import Foundation

// String ↔ NSString bridge is seamless
let swiftString: String = "hello"
let ns: NSString = swiftString as NSString
print(ns.uppercased)           // via NSString API
let back: String = ns as String
print(back + " world")

// NSArray / NSDictionary bridge to Swift collections
let nsArray: NSArray = ["a", "b", "c"]
let swiftArray = nsArray as! [String]
print(swiftArray.joined(separator: ","))

let nsDict: NSDictionary = ["lang": "Swift", "year": 2014]
let swiftDict = nsDict as! [String: Any]
print(swiftDict["lang"] as? String ?? "-")

NSError → throws

Los parámetros NSError** de Objective-C se importan como throws. Use try/do-catch; no necesita punteros manuales.

import Foundation

// Many Obj-C methods that take NSError** are imported as throwing in Swift.
let fm = FileManager.default

// Create a temporary file, then remove it with "try".
let tmp = (NSTemporaryDirectory() as NSString).appendingPathComponent("demo.txt")
FileManager.default.createFile(atPath: tmp, contents: Data("hi".utf8), attributes: nil)

do {
    try fm.removeItem(atPath: tmp)          // was NSError** in Obj-C → throws in Swift
    print("removed ok")
} catch {
    print("remove failed:", error)
}

Exponer Swift a Objective-C

Anote las API de Swift con @objc/@objcMembers (y herede de NSObject) para hacerlas visibles en Objective-C dentro de bases de código mixtas.

import Foundation

@objcMembers
class Adder: NSObject {
    dynamic var last: Int = 0
    @objc func add(_ a: Int, _ b: Int) -> Int { last = a + b; return last }
}

let a = Adder()
print(a.add(2, 3))  // 5
print(a.last)       // 5
// In mixed projects, Obj-C can call Adder via the generated Swift header.

Respuesta sobre el puente de NSError

Comprobación rápida: ¿Cómo se importan las API NSError**?

Repaso

Repaso:

  • Importe Darwin/Glibc y llame a API sencillas de C.
  • Use los puentes de Foundation para cadenas y colecciones.
  • NSError** de Objective-C se convierte en throws de Swift.

Preguntas frecuentes

¿La lección «Interoperabilidad con C/Obj-C de un vistazo (sin aspectos específicos de iOS)» es gratis?

Sí — el texto completo de «Interoperabilidad con C/Obj-C de un vistazo (sin aspectos específicos de iOS)» 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 Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 3 lecciones en total.

¿Qué aprenderé en «Interoperabilidad con C/Obj-C de un vistazo (sin aspectos específicos de iOS)»?

Importe módulos del sistema de C, llame a API POSIX/C sencillas y use puentes de Foundation (String/NSString, arrays/dictionaries). Vea cómo NSError** de Objective-C se convierte en throws de Swift. Practicas Swift Academy 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 Swift Academy?

No se requiere experiencia previa. Swift Academy 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 3.

¿Cuánto tiempo toma la lección «Interoperabilidad con C/Obj-C de un vistazo (sin aspectos específicos de iOS)»?

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 Swift Academy?

Sí. Cada lección de Swift Academy 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

  1. Scripts de Swift (shebang de swift) y herramientas de línea de comandos
  2. Interoperabilidad con C/Obj-C de un vistazo (sin aspectos específicos de iOS)
  3. Empaquetar binarios con SPM
← Volver a Swift Academy