11 juillet 2025 - Classes en Swift : l’héritage et la mémoire partagée
Salut ! Nous voilà au jour 35 de formation et au 12ème jour des 100 Days of SwiftUI. Vendredi ensoleillé qui clôture cette semaine intensive !
Aujourd’hui j’ai fait un peu différemment pour le journal de bord parce que je grille mon forfait cloud en testant d’autres projets avec Claude Code. Du coup, petite adaptation de méthode mais l’essentiel y est !
#
Ce que j’ai fait ce matin
On a vu les classes dans Swift et maintenant je comprends enfin pourquoi les structures ressemblaient à des objets comme expliqué l’autre jour. En fait, classes et structures, c’est presque la même chose mais elles servent des fonctionnalités différentes.
La grande différence - et je vais te la détailler dans l’apprentissage du jour - c’est que les structures créent chaque fois une nouvelle instance alors que les classes créent une copie de l’instance principale. C’est beaucoup plus pertinent dans l’écriture de Swift vu que potentiellement tu peux partager des informations entre différents bouts de code.
C’est comme ça que je l’ai compris, maintenant à voir si c’est bien ça ! Cette différence fondamentale entre “value types” et “reference types” commence à faire sens dans ma tête.
J’ai fait la théorie puis j’ai refait la même technique qu’hier avec un ensemble d’exercices très rapides pour vraiment intégrer les concepts dans mon cerveau. En parallèle cet après-midi, j’avancerai dans l’application sur le téléphone comme ça je peux refaire les exercices à la volée - parce que je ne suis pas encore très bon !
#
L’après-midi en mode vibe coding
Cet après-midi j’ai plus focalisé sur le projet en vibe coding que j’ai fait, je n’ai pas regardé au niveau de l’apprentissage Swift. On recommencera la semaine prochaine avec soit le développement, soit la mise en place du troisième projet, en tout cas des définitions pour voir à partir de quel moment je peux commencer à coder.
Dès que je vais avoir les premières informations de Paul sur comment ouvrir un projet Xcode et comment commencer un app, je commencerais le codage des app du portfolio. Je ne veut pas spoil les informations avant - je voulais vraiment suivre le programme tel Paul l’a conçu !
#
Apprentissages du jour : Les classes en Swift
##
Qu’est-ce qu’une classe ?
Les classes sont comme les structures mais avec 5 différences importantes. Martin Fowler a dit : “N’importe quel imbécile peut écrire du code qu’un ordinateur peut comprendre, mais les bons programmeurs écrivent du code que les humains peuvent comprendre.”
##
Les 5 différences fondamentales
###
1. L’héritage de classe
Tu peux faire qu’une classe hérite d’une autre classe. C’est comme dire qu’un développeur est un employé, mais avec des spécificités en plus.
class Employee {
let hours: Int
init(hours: Int) {
self.hours = hours
}
func printSummary() {
print("I have worked \(hours) hours/day")
}
}
final class Developer: Employee {
func work() {
print("I'm working \(hours) hours")
}
override func printSummary() {
print("I never work without coffee, otherwise it's \(hours), sometimes more")
}
}
Le mot-clé final signifie qu’aucune autre classe ne peut hériter de cette famille de classes.
###
2. Pas d’initialisateur automatique
Swift ne génère pas automatiquement un initialisateur memberwise pour les classes. Tu dois le créer toi-même.
###
3. Partage des données entre copies
Si tu copies une instance de classe, les deux copies partagent les mêmes données. C’est la différence majeure avec les structures !
class User {
var username = "Anonymous"
}
var user1 = User()
var user2 = user1 // Partage les mêmes données !
user2.username = "John"
print(user1.username) // Affiche "John" aussi !
- Les classes sont des reference types : elles pointent vers une valeur ailleurs
- Les structures sont des value types : elles contiennent directement les valeurs
###
4. Les déinitialisateurs
On peut ajouter un deinitializer qui s’exécute quand la dernière copie est détruite :
class User1 {
let id: Int
init(id: Int) {
self.id = id
print("User \(id): I'm alive")
}
deinit {
print("User \(id): I'm dead")
}
}
Règles importantes :
- Pas de
func
dans le déinitialisateur - Jamais de paramètres ou de valeur de retour
- S’exécute quand la dernière copie est détruite
- On ne l’appelle jamais directement
- Les structures n’ont pas de déinitialisateur
###
5. Propriétés variables dans les constantes
Les instances constantes de classe peuvent avoir leurs propriétés variables modifiées :
class User3 {
var name = "Alessandro"
}
let user3 = User3() // Constante !
user3.name = "Taylor" // Mais on peut changer les propriétés !
Pas besoin de mutating dans les classes.
##
Exercices pratiques réalisés
J’ai fait 10 exercices pour bien intégrer ces concepts. Quelques découvertes importantes :
###
Propriétés privées avec getter public
class Book {
private(set) var title: String // Lecture seule de l'extérieur
init(title: String) {
self.title = title
}
}
###
Héritage avec super.init
class Student: Person {
private(set) var studentID: String
init(name: String, age: Int?, studentID: String) {
self.studentID = studentID
super.init(name: name, age: age) // Obligatoire !
}
}
###
Gestion des optionnels avec nil-coalescing
print("\(person.name) age is \(person.age ?? 0)") // Évite "Optional(30)"
#
Checkpoint 7 : Hiérarchie d’animaux
J’ai créé une hiérarchie complète d’animaux avec :
- Animal (classe de base avec
legs
) - Dog → Corgi et Poodle (chacun avec son propre aboiement)
- Cat → Persian et Lion (avec
isTame
et des miaulements différents)
C’était un excellent exercice pour comprendre l’héritage et les méthodes override.
#
Réflexions sur cette semaine
Cette journée marque la fin d’une semaine vraiment dense. Les classes m’ouvrent tout un nouveau monde de possibilités en programmation. Je commence à comprendre pourquoi Swift est structuré comme ça et comment ces concepts vont s’articuler avec SwiftUI.
Dernière ligne droite : encore une heure, une session de natation, et ensuite c’est parti pour le week-end bien mérité !
À lundi pour la suite de l’aventure Swift !