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)
#endifPonts 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
- Scripts Swift (shebang Swift) et outils en ligne de commande
- Interopérabilité C/Obj-C en bref (sans spécificités iOS)
- Empaqueter des binaires avec SPM