Bibliothèque standard Swift (iOS/macOS) : aperçu complet
La bibliothèque standard Swift est un ensemble fondamental de types, de protocoles et de fonctions intégrés directement dans le langage. Elle fournit les fonctionnalités de base nécessaires au développement pour iOS, macOS, watchOS et tvOS. Contrairement aux frameworks Foundation ou UIKit, qui font partie du SDK, la bibliothèque standard Swift est disponible immédiatement sans importations supplémentaires. Dans cet article, nous allons détailler ses composants clés, structures de données, protocoles et mécanismes de gestion de la mémoire.
Types de données et collections principaux
Swift fournit des collections puissantes et type-safe, optimisées pour les performances.
Tableaux (Array)
Collection ordonnée d'éléments du même type. Prend en charge l'accès aléatoire et le redimensionnement dynamique.
var numbers: [Int] = [1, 2, 3]numbers.append(4)let first = numbers[0] // 1numbers.sort()Ensembles (Set)
Collection non ordonnée d'éléments uniques. Idéale pour les tests d'appartenance et les opérations mathématiques.
let setA: Set<Int> = [1, 2, 3, 4]let setB: Set<Int> = [3, 4, 5, 6]let intersection = setA.intersection(setB) // {3, 4}let union = setA.union(setB) // {1, 2, 3, 4, 5, 6}Dictionnaires (Dictionary)
Collection non ordonnée de paires clé-valeur. Les clés doivent être hachables (Hashable).
var capitals: [String: String] = ["Russie": "Moscou", "États-Unis": "Washington"]capitals["Allemagne"] = "Berlin"if let russiaCapital = capitals["Russie"] { print(russiaCapital) // Moscou}Protocoles : fondement de la polyvalence de Swift
La bibliothèque standard Swift est construite sur des protocoles qui définissent une interface commune pour différents types.
- Equatable — permet de comparer des instances avec
==. - Hashable — requis pour utiliser un type comme clé de dictionnaire ou élément d'ensemble.
- Comparable — permet d'ordonner des objets (<, >, <=, >=).
- Codable — combine Encodable et Decodable pour la sérialisation en JSON, Property List et autres formats.
- CaseIterable — fournit automatiquement une collection de toutes les valeurs d'une énumération.
Exemple d'utilisation de Codable
struct User: Codable { let id: Int let name: String let isActive: Bool}
let json = """{ "id": 42, "name": "Ivan", "isActive": true}""".data(using: .utf8)!
let decoder = JSONDecoder()if let user = try? decoder.decode(User.self, from: json) { print(user.name) // Ivan}Gestion de la mémoire : ARC et Copy-on-Write
Swift utilise le comptage automatique de références (ARC) pour gérer la mémoire des types référencés (classes). Pour les structures et énumérations, la sémantique de copie de valeur s'applique, avec l'optimisation Copy-on-Write (COW) pour les collections.
var array1 = [1, 2, 3]var array2 = array1 // Tant qu'on ne modifie pas — données partagéesarray2.append(4) // Ici, une copie réelle a lieu (COW)print(array1.count) // 3 — le tableau d'origine n'a pas changéModèles génériques (Generics)
Les Generics permettent d'écrire des fonctions et des types flexibles et réutilisables sans perte de performance.
func swapTwoValues<T>(_ a: inout T, _ b: inout T) { let temporaryA = a a = b b = temporaryA}
var x = 10var y = 20swapTwoValues(&x, &y) // x = 20, y = 10Types optionnels (Optionals)
La gestion sécurisée des valeurs absentes est l'une des caractéristiques clés de Swift. Les optionnels empêchent les exceptions de pointeur nul.
var optionalString: String? = "Bonjour"// Optional bindingif let unwrapped = optional