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
}
SPONSORED Transform your career with the iOS Lead Essentials. Unlock over 40 hours of expert training, mentorship, and community support to secure your place among the best devs. Click for early access to this limited offer and a FREE crash course.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.