0Pricing
Swift Academy · Leçon

Interopérabilité C/Obj-C en bref (sans spécificités iOS)

Importez les modules système C, appelez de simples API POSIX/C et utilisez les ponts de Foundation (String/NSString, tableaux/dictionnaires). Découvrez comment NSError** d’Objective-C devient throws en Swift.

Interopérabilité C/Obj-C en bref (sans spécificités iOS) est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 3. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 3 leçons au total.

Carte de l’interopérabilité

Voici un aperçu rapide de l’interopérabilité :

  • C : importez les modules système et appelez les utilitaires POSIX
  • Foundation : ponts entre String/NSArray/NSDictionary
  • NSError → throws de Swift

Imports C et pointeurs

Swift peut appeler directement de nombreuses API C. Utilisez un import conditionnel pour assurer la portabilité et convertissez char* avec 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)

Exemple de génération aléatoire en C

Appelez les fonctions C de la plateforme (par exemple, arc4random_uniform sur Apple et random() sur Linux). Gardez les exemples courts et 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

Ponts avec Foundation

Les types de Foundation se convertissent naturellement : 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

Les paramètres Objective-C NSError** sont importés comme throws. Utilisez try/do-catch : aucun pointeur manuel n’est nécessaire.

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)
}

Exposer Swift à Objective-C

Annotez les API Swift avec @objc/@objcMembers (et faites-les hériter de NSObject) pour les rendre visibles depuis Objective-C dans les bases de code mixtes.

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.

Réponse sur le pont NSError

Vérification rapide : comment les API NSError** sont-elles importées ?

Récapitulatif

Récapitulatif :

  • Importez Darwin/Glibc et appelez des API C simples.
  • Utilisez les ponts de Foundation pour les chaînes et les collections.
  • NSError** d’Objective-C correspond à throws en Swift.

Questions Fréquemment Posées

La leçon « Interopérabilité C/Obj-C en bref (sans spécificités iOS) » est-elle gratuite ?

Oui — le texte complet de « Interopérabilité C/Obj-C en bref (sans spécificités iOS) » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 3 leçons au total.

Qu'est-ce que j'apprendrai dans « Interopérabilité C/Obj-C en bref (sans spécificités iOS) » ?

Importez les modules système C, appelez de simples API POSIX/C et utilisez les ponts de Foundation (String/NSString, tableaux/dictionnaires). Découvrez comment NSError** d’Objective-C devient throws… Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 3.

Combien de temps prend la leçon « Interopérabilité C/Obj-C en bref (sans spécificités iOS) » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Scripts Swift (shebang Swift) et outils en ligne de commande
  2. Interopérabilité C/Obj-C en bref (sans spécificités iOS)
  3. Empaqueter des binaires avec SPM
← Retour à Swift Academy