Les structures et les classes (qui permettent toutes deux de créer des "types de données") peuvent avoir leurs propres variables et constantes, appelées propriétés. Cela vous permet d'attacher des valeurs à vos types pour les représenter de manière unique, mais comme les types peuvent aussi avoir des méthodes, vous pouvez les faire se comporter en fonction de leurs propres données.
Jetons un coup d'oeil à un exemple maintenant :
struct Person {
var clothes: String
var shoes: String
func describe() {
print("I like wearing \(clothes) with \(shoes)")
}
}
let taylor = Person(clothes: "T-shirts", shoes: "sneakers")
let other = Person(clothes: "short skirts", shoes: "high heels")
taylor.describe()
other.describe()
Comme vous pouvez le constater, lorsque vous utilisez une propriété dans une méthode, celle-ci utilise automatiquement la valeur appartenant au même objet.
Swift vous permet d'ajouter du code à exécuter lorsqu'une propriété est sur le point d'être modifiée ou a été modifiée. C'est souvent un bon moyen de mettre à jour l'interface utilisateur lorsqu'une valeur change, par exemple.
Il existe deux types d'observateurs de propriétés : willSet
et didSet
, et ils sont appelés avant ou après la modification de la valeur d'une propriété. Dans willSet
, Swift fournit à votre code une valeur spéciale appelée newValue
qui contient la valeur de la nouvelle propriété. Dans didSet
, vous disposez de oldValue
pour représenter la valeur précédente.
Associons deux observateurs de propriétés à la propriété clothes
d'une structure Person
:
struct Person {
var clothes: String {
willSet {
updateUI(msg: "I'm changing from \(clothes) to \(newValue)")
}
didSet {
updateUI(msg: "I just changed from \(oldValue) to \(clothes)")
}
}
}
func updateUI(msg: String) {
print(msg)
}
var taylor = Person(clothes: "T-shirts")
taylor.clothes = "short skirts"
Cela affichera les messages "I'm changing from T-shirts to short skirts" et "I just changed from T-shirts to short skirts."
Il est possible de créer des propriétés qui exécutent en fait du code en coulisses. Nous avons déjà utilisé la méthode uppercased()
des chaînes de caractères, par exemple, mais il existe également une propriété appelée capitalized
qui peut être utilisée en cas de besoin, plutôt que chaque chaîne de caractères stocke systématiquement une version commençant par une majuscule d'elle-même.
Pour créer une propriété calculée, placez une accolade ouvrante après votre propriété, puis utilisez get
ou set
pour exécuter une action au moment opportun. Par exemple, si nous voulons ajouter une propriété ageInDogYears
retournant automatiquement l'âge de la personne multiplié par sept, voici ce que nous devons écrire :
struct Person {
var age: Int
var ageInDogYears: Int {
get {
return age * 7
}
}
}
var fan = Person(age: 25)
print(fan.ageInDogYears)
Les propriétés calculées sont de plus en plus courantes dans le code d'Apple, mais moins courantes dans le code des utilisateurs.
Remarque : Si vous avez l'intention de les utiliser uniquement pour lire des données, vous pouvez simplement supprimer la partie get
, comme ceci :
var ageInDogYears: Int {
return age * 7
}
SAVE 50% To celebrate WWDC23, all our books and bundles are half price, so you can take your Swift knowledge further without spending big! Get the Swift Power Pack to build your iOS career faster, get the Swift Platform Pack to builds apps for macOS, watchOS, and beyond, or get the Swift Plus Pack to learn advanced design patterns, testing skills, and more.
Link copied to your pasteboard.