La sortie de Xcode 7.3 en version béta amène sont lot de nouveauté et surtout avec lui une première version de Swift 2.2. Donc profitons en pour regarder les principaux changements et ajouts de cette version majeure du langage.
Les paramètres n’ont plus besoin de guillemet oblique
Comme vous le savez peut être, Apple ayant mis le code du langage Swift en open-source il est maintenant possible pour les gens de faire des propositions sur l’évolution du langage. La première de ces évolutions (qui apparait dans Swift 2.2) est celle de Doug Gregor (SE-0001) qui autorise l’utilisation de la plupart des mots clés comme étiquette pour les arguments de méthode. Cela a pout conséquence la possibilité n’importe quel mot comment argument excepté (bien il faut des exception, sinon ce serait pas rigolo) les mots clés var, let et inout.
En voici un petit example :
func travel(in locomotion: Locomotion, if: Weather) {
//..
}
Le compilateur avertis automatiquement en cas d’erreur. Par example si vous utilisez le mot clé `where` avec les guillemets obliques il fournit une correction automatique pour enlever les guillemets obliques.
Curryfication ré-inventé
La proposition SE-0002 de David Farler supprime la possibilité de faire de curryfication tel qu’on l’entend habituellement. En fait il supprime cette capacité du langage pour se basé sur des structures déjà existantes afin de simplifier le langage. Un example sera plus simple à comprendre :
// Before:
func curried(x: Int)(y: String) -> Float {
return Float(x) + Float(y)!
}
// After:
func curried(x: Int) -> (String) -> Float {
return {(y: String) -> Float in
return Float(x) + Float(y)
}
}
Comme vous pouvez le voir ici, en fait la curryfication se fait maintenant en créant une fonction qui retourne une fonction avec un paramètre nommé. Cela revient au même et simplifie l’apprentissage de swift car il y a une structure en moins à apprendre.
Les opérateurs ++ et — sont maintenant dépréciés
Une autre proposition, du créateur du langage cette fois (Chris Lattner), a aussi été approuvée et intégré à cette version de swift. Il s’agit de la proposition SE-0004 qui supprime les fameux opérateurs ++ et — pour respectivement incrémenter et décrémenter un nombre. Il a pris cette décision car ce n’est pas un opérateur intuitif pour les débutant et qu’ils permettaient trop de bidouillage.
La release note stipule qu’en remplacement il est conseillé d’utiliser « x += 1 sur les types entiers ou les flottants et x = x.successor() sur les types Index ». Donc maintenant au lieu de faire ceci pour les opérateurs post-fixé (x++ ou x– par example) :
return x++
Il est conseillé de faire cela :
defer { x += 1 }
return x
Tandis que pour les opérations pré-fixés (++x ou –x), il suffit juste de faire l’opération avant de retourner la valeur :
x += 1
return x
Les boucles for-loops comme en langage C ont été dépréciés
Comme pour les opérateurs précédents les fameuses boucles for;; ne sont plus appréciées dans cette version. Comme le montre la proposition SE-0007 de Erica Sadun, ils seront supprimé dans Swift 3.
En swift, maintenant la norme c’est l’utilisateur des boucles for-in. Cela n’empêche pas l’utilisation des différents mots clé à l’intérieur des boucles comme break, continue ou goto.
Vous devez maintenant remplacer ce genre de code :
for var i = 0 ; i < 10 ; i++ {
print(i)
}
Par quelque chose de plus swift style :
for i in 0 ..< 0 {
print(i)
}
Swift Configurations
La proposition de David Farler (SE-0020) introduit une nouvelle construction pour gérer la configuration et les version de swift au sein du langage. Par example il est maintenant possible de tester une version de swift de cette manière :
#if swift(>=2.2)
print("Active!")
#else
this! code! will! not! parse! or! produce! diagnostics!
#endif
La comparaison de tuple
Grâce à Kevin Ballard (SE-0015) il est maintenant possible de faire des comparaisons sur les tuples. Pour cela ils ont rendu les tuples conforment avec les protocoles Equatable et Comparable :
let a = (1, "un")
let b = (1, "un")
if a == b {
// true
}
Quelques autres points importants :
- Amélioration des balises pour la documentation avec l’ajout de – keyword:, – recommended:, and -recommendedover:.
- Les init désignés peuvent maintenant être faillible et produire des exceptions.
- Remplacer vos anyGenerator() par l’utilisation des initialisations avec AnyGenerator. Déconseillé en 2.2, et supprimé à la version Swift 3.