9 Juillet 2025 - Structures en Swift : créer ses propres types
Nouvelle journée dans mon apprentissage Swift ! Jour 33 de formation et 10ème jour des 100 Days of SwiftUI.
Excellente nuit, mes batteries internes sont chargées à 100% ! Paul Hudson avait raison : après les closures, tout semble plus facile… mais ce n’est pas vraiment le cas. Il y a encore des concepts à maîtriser qui sont propres à Swift.
#
Première impression sur les structures
Au début, quand on découvre les structures (structs), on pense naturellement aux classes et objets d’autres langages. Mais plus on avance dans le cours, plus on comprend que les structs sont en réalité des types personnalisés - c’est là toute la subtilité de Swift.
#
Apprentissages du jour : Les structures
##
Créer ses propres structures
Une structure nous permet de regrouper des données liées et de leur donner des fonctionnalités. C’est comme créer notre propre type de données.
struct Album {
let title: String
let artist: String
let year: Int
func printSummary(){
print("\(title) : \(artist) - \(year)")
}
}
- Convention importante : La première lettre doit être en majuscule
- Les variables à l’intérieur sont appelées des propriétés
- Les fonctions à l’intérieur sont appelées des méthodes
##
Instances et initialiseurs
Quand on crée un objet à partir d’une structure, on parle d’instance. Swift génère automatiquement un initialiseur :
let red = Album(title: "Red", artist: "Taylor Swift", year: 2012)
Cette syntaxe ressemble à un appel de fonction - c’est ce qu’on appelle le “sugar syntax”. En réalité, Swift appelle une fonction init()
dans la structure.
##
Le mot-clé mutating
mutating
Si une méthode doit modifier les propriétés de la structure, elle doit être marquée comme mutating
. Cela ne fonctionne qu’avec des variables (var
), pas avec des constantes (let
).
mutating func takeVacation(days: Int) {
if vacationRemaining > days {
vacationRemaining -= days
print("Je pars en vacances")
}
}
##
Propriétés calculées
Les propriétés calculées sont des valeurs déterminées dynamiquement. Elles doivent toujours être déclarées avec var
et avoir un type spécifié.
var vacationRemaining: Int {
get {
vacationAllocated - vacationTaken
}
set {
vacationAllocated = vacationTaken + newValue
}
}
newValue
est un mot magique fourni par Swift pour les setters- On peut créer des propriétés en lecture seule en omettant le
set
##
Observateurs de propriétés
Les observateurs permettent d’exécuter du code quand une propriété change :
didSet
: s’exécute après le changementwillSet
: s’exécute avant le changement (plus rare)
var score = 0 {
didSet {
print("Score is now \(score)")
}
}
Important : Éviter de mettre trop de logique dans les observateurs
##
Initialiseurs personnalisés
On peut créer nos propres initialiseurs pour plus de flexibilité :
struct Player {
let name: String
let number: Int
init(name: String) {
self.name = name
number = Int.random(in: 1...99)
}
init(number: Int) {
name = "Anonymous"
self.number = number
}
}
- Pas de mot-clé
func
self
est utilisé pour distinguer les propriétés des paramètres- Toutes les propriétés doivent être initialisées
Note : Dès qu’on crée un initialiseur personnalisé, l’initialiseur par défaut disparaît. Pour le conserver, il faut le placer dans une extension.
##
Différence fonction vs méthode
- Fonction : indépendante, pas liée à un type
- Méthode : liée à une structure ou classe
#
Réflexions
Cette approche des structures me rappelle un peu les classes d’autres langages, mais avec une philosophie différente. Swift privilégie les structures pour la plupart des cas d’usage.
Le fait de pouvoir créer des propriétés calculées et des observateurs directement dans la structure est vraiment puissant. Ça permet de garder la logique au bon endroit.
#
Avancement projets portfolio
J’ai également fini rapidement les préparations pour le projet 2 du portfolio et je prépare déjà le matériel pour la troisième application. Cette approche d’anticipation me permet de garder une longueur d’avance et d’éviter les retards quand viendra le moment du développement.
À demain !
Alessandro