Quoi de neuf dans Swift depuis la WWDC 2020 – Meilleure programmation

Online Coding Courses for Kids

Langue

Swift Evolution

Syntaxe de fermeture multiple à la fin (SE-0279)

// Multiple trailing closure syntaxUIView.animate(withDuration: 0.3, animations: {
self.view.alpha = 0
})
⬇️⬇️⬇️UIView.animate(withDuration: 0.3) {
self.view.alpha = 0
}

Depuis sa création, Swift a pris en charge ce que l’on appelle la syntaxe de fermeture finale qui vous permet de placer l’argument final dans une méthode entre parenthèses lorsqu’il s’agit d’une fermeture.

Il peut être plus concis et moins imbriqué sans perte de clarté, ce qui rend le site d’appel beaucoup plus facile à lire.

Cependant, la restriction de la syntaxe de fermeture finale à la seule fermeture finale a limité son applicabilité.

UIView.animate(withDuration: 0.3, animations: {
self.view.alpha = 0
}) { _ in
self.view.removeFromSuperview()
}

Dans ce cas, la fermeture de fin rend le code plus difficile à lire car son rôle n’est pas clair. Pire, il change la signification du bloc d’achèvement d’un site d’appel au bloc d’animation d’un autre.

Les inquiétudes concernant la confusion du site d’appel ont conduit les guides de style Swift à interdire l’utilisation de la syntaxe de fermeture finale lorsqu’un appel de méthode, comme celui-ci, a plusieurs arguments de fermeture.

UIView.animate(withDuration: 0.3, animations: {
self.view.alpha = 0
}, completion: { _ in
self.view.removeFromSuperview()
})
UIView.animate(withDuration: 0.3) {
self.view.alpha = 0
}
⬇️
UIView.animate(withDuration: 0.3, animations: {
self.view.alpha = 0
}) { _ in
self.view.removeFromSuperview()
}

Par conséquent, si jamais nous avons besoin d’ajouter un argument de fermeture supplémentaire, beaucoup d’entre nous se retrouvent à devoir redéfinir notre code plus qu’il ne semble nécessaire.

SE-0281

UIView.animate(withDuration: 0.3) {
self.view.alpha = 0
}
⬇️
UIView.animate(withDuration: 0.3) {
self.view.alpha = 0
} completion: { _ in
self.view.removeFromSuperview()
}

La nouveauté de Swift 5.3 est la syntaxe de fermeture multiple à la fin. Cela étend les avantages de la syntaxe de fermeture à la fin aux appels avec plusieurs arguments de fermeture, et aucun réamorçage n’est requis pour en ajouter un supplémentaire.

La syntaxe de fermeture multiple à la fin convient également parfaitement aux DSL. Le nouveau SwiftUI Gauge La vue est utilisée pour indiquer le niveau d’une valeur par rapport à une certaine capacité globale.

En tirant parti de la syntaxe de fermeture multiple à la fin, Gauge est capable de révéler avec élégance et progressivement ses points de personnalisation.

Conception de l’API: syntaxe de fermeture finale

// API design : trailing closure syntaxextension Collection {
func prefix(while predicate: (Element) -> Bool) -> SubSequence
}
message.body = "Hello WWDC!n--Kyle"
let summary = message.body.prefix { !$0.isNewline }
assert(summary, "Hello WWDC!"

Un meilleur nom pour pourrait être quelque chose comme ce qui suggère que le résultat est ancré au début de la collection.

Il est important que le nom de base avec une méthode clarifie le rôle de la première fermeture de fin, car son étiquette sera supprimée même s’il ne s’agit pas du premier argument de la méthode.

Close Menu