Les structures Swift permettent de représenter des données complexes ainsi que des comportements.
Dans SwiftUI, une structure sera généralement placée dans son propre fichier. Le nom de la structure sera identique au nom du fichier.
Puisque les structures représentent les données de l'application (le modèle), leurs fichiers seront placés dans un dossier nommé Models.
Le nom de la structure sera un mot au singulier.
Dans la structure, les propriétés sont définies avec le mot-clé var et les méthodes, avec le mot-clé func.
import Foundation
struct Ami {
var nomFamille: String
var prenom: String
func inviter() {
...
}
}
Pour créer une instance de la structure, on procédera comme suit :
let ami = Ami(nomFamille: "Gagnon", prenom: "Annie")
Dans cet exemple, il ne sera pas possible de modifier les propriétés de l'instance puisqu'elle a été créée avec le mot-clé let.
Chaque structure contient un constructeur par défaut, qu'on appelle en anglais memberwise initializer. Il n'y a rien à coder pour que ce constructeur existe. Il est là de base.
Le memberwise initializer permet d'instancier la structure en précisant une valeur pour chacune des propriétés, comme dans l'exemple précédent.
Il est possible de définir un constructeur nommé init() qui répondra à nos besoins de façon plus précise, par exemple en donnant une valeur par défaut à certaines propriétés ou en effectuant un traitement particulier.
Attention : sans précaution, ceci écrasera le memberwise initializer. C'est pourquoi il est préférable de créer une extension de la structure dans laquelle le ou les constructeurs seront définis.
De cette façon, l'instance pourra être créée à l'aide du memberwise initializer ou d'un des constructeurs définis dans l'extension.
Dans un projet SwiftUI, les extensions peuvent être placées à différents endroits selon la structure de fichiers dont vous vous êtes dotés. Dans le cas d'une extension à une structure que vous avez créée, il est intéressant de la placer dans le même fichier que la structure.
extension Ami {
init(prenom: String) {
self.prenom = prenom
self.nomFamille = ""
}
}
Désormais, pour instancier un Ami, il est possible de fournir seulement le prénom.
Le nom de famille pourra être ajusté au besoin par une instruction séparée.
var ami = Ami(prenom: "Annie")
...
ami.nomFamille = "Gagnon"
Tout constructeur doit s'assurer que chacune des propriétés a une valeur valide lorsque l'instanciation est terminée.
▼Publicité