Quoi de neuf dans Swift 4

Swift 4 est en préparation depuis quelques mois. Si vous êtes comme moi, vous pouvez suivre Swift Evolution pour rester au courant de toutes les propositions et modifications. Même si vous le faites, le moment est venu de passer en revue tous les ajouts et modifications apportés à la langue dans cette nouvelle itération..

Un aperçu de Swift 4 était déjà disponible quelques semaines avant l'annonce de Xcode 9 à la WWDC 2017. Dans cet article, vous en apprendrez plus sur les nouvelles fonctionnalités de Swift 4, des toutes nouvelles API à l'amélioration de la syntaxe du langage..

Voyons d'abord comment vous pouvez installer le nouveau compilateur sur votre machine.

Configuration Xcode

Il existe deux manières d’exécuter Swift 4. Vous pouvez installer Xcode 9 beta si vous avez un compte de développeur y ayant accès ou configurer Xcode 8 pour qu’il fonctionne avec un instantané Swift 4. Dans le premier cas, téléchargez la version bêta à partir de la page de téléchargement de votre compte développeur..

Si vous préférez utiliser Xcode 8, rendez-vous sur Swift.org pour télécharger le dernier instantané de développement de Swift 4.0. Une fois le téléchargement terminé, double-cliquez ouvrir le fichier .pkg, qui installe l'instantané. 

Basculez vers Xcode maintenant et allez à Xcode> Chaînes d'outils> Gérer les chaînes d'outils. À partir de là, sélectionnez l'instantané Swift 4.0 nouvellement installé. Redémarrez Xcode et maintenant Swift 4 sera utilisé lors de la compilation de votre projet ou de votre terrain de jeu. Notez que tout le code présenté dans ce tutoriel est également disponible dans un dépôt GitHub..

Nouvelles fonctionnalités

Jetons un coup d'œil aux nouvelles fonctionnalités ajoutées à Swift 4. Une mise en garde: le langage est toujours en version bêta et nous verrons probablement davantage de modifications et de corrections de bugs avant la sortie de la version officielle. De plus, certaines des propositions les plus récemment approuvées peuvent ne pas encore être mises en œuvre pour le moment, alors gardez un œil sur les prochaines notes de version pour voir ce qui sera mis en œuvre et corrigé..

Encodage et décodage

L'analyse JSON est l'un des sujets les plus discutés dans la communauté Swift. Il est bon de voir que quelqu'un a finalement pris soin de rédiger les propositions SE-0166 et SE-0167 et a poussé l'idée d'actualiser les API d'archivage et de sérialisation dans le cadre Foundation. Dans Swift 4, il n’est plus nécessaire d’analyser ou d’encoder manuellement votre classe, struct ou enum. 

Nouveau Codable et Décodable Des protocoles ont été ajoutés et vous pouvez rendre vos classes conformes en ajoutant simplement Codable (qui est un alias pour Décodable & Encodable) à la liste d'héritage de la classe. Ensuite, vous pouvez utiliser le JSONEncoder encoder une instance de la classe:

let wwdc = Conférence (nom: "WWDC", ville: "San Jose", date: date (timeIntervalSince1970: 0)) let jsonEncoder = JSONEncoder () let jsonEncoded = try jsonEncoder.encode (wwdc) let jsonString = String (data: jsonEncoded, encoding: .utf8) // "nom": "WWDC", "ville": "San José", "date": - 978307200

Comme vous pouvez le voir, vous instanciez un JSONEncoder objet pour convertir la structure en une représentation de chaîne JSON. Vous pouvez modifier quelques paramètres pour obtenir le format JSON exact dont vous avez besoin. Par exemple, pour définir un format de date personnalisé, vous pouvez spécifier un dateEncodingStrategy de la manière suivante:

laisser jsonEncoder = jSONEncoder () laisser dateFormter = DateFormter () dateFormter.date = .long dateFormat.timeStyle =. (data: jsonEncoded, encoding: .utf8) // "name": "WWDC", "ville": "San Jose", "date": "1er janvier 1970 à 01:00:00 GMT + 1" 

Le processus inverse pour décoder une chaîne fonctionne de manière très similaire, grâce à la JSONDecoder classe.

let jsonDecoder = JSONDecoder () let decodedWWDC = essayez jsonDecoder.decode (Conference.self, from: jsonEncoded) // 'decodedWWDC' est déjà du type Conference!

Comme vous pouvez le voir, en passant le type de l'objet à la décoder méthode, nous indiquons au décodeur quel objet nous attendons des données JSON. Si tout réussit, nous allons préparer une instance de notre objet modèle..

Ce n'est même pas toute la puissance et la modularité de la nouvelle API. Au lieu d'utiliser un JSONEncoder, vous pouvez utiliser le nouveau PropertyListEncoder et PropertyListDecoder au cas où vous auriez besoin de stocker des données dans un fichier plist. Vous pouvez également créer vos propres encodeurs et décodeurs personnalisés. Il vous suffit de rendre votre décodeur conforme à la Décodeur et votre encodeur au Codeur protocole.

Les cordes

Dans le cadre du manifeste des chaînes, le Chaîne Le type a également reçu un rafraîchissement important. Il est maintenant conforme à nouveau (après avoir été supprimé dans Swift 2) à la Collection protocole grâce à la proposition SE-0163. Alors maintenant, vous pouvez simplement énumérer sur une chaîne pour obtenir tous les caractères.

let text: String = "Bonjour de Tutsplus!" pour caractère dans text.reversed () print (character)

Sous-chaîne est un nouveau type qui est conforme au même StringProtocol à qui Chaîne se conforme également. Vous pouvez créer un nouveau Sous-chaîne en inscrivant simplement un Chaîne. La ligne suivante crée un Sous-chaîne en omettant le premier et le dernier caractère.

let substring = text [text.index (après: text.startIndex)… 

Un ajout intéressant qui devrait faciliter le travail avec de gros morceaux de texte est les chaînes multilignes. Si vous devez créer un bloc de texte sur plusieurs lignes, vous deviez auparavant insérer manuellement \ n partout. C'était très inélégant et difficile à gérer. Il existe désormais un meilleur moyen d'écrire des chaînes multilignes, comme le montre l'exemple suivant:

let welcomeMessage = "" "Salut, bienvenue dans Envato Tuts +. Nous espérons que vous apprécierez apprendre avec nous!" ""

Peu de règles accompagnent cette nouvelle syntaxe. Chaque chaîne commence par un guillemet triple ("" "). Ensuite, si la chaîne entière est en retrait, l’espacement des caractères de fermeture détermine l’espacement à supprimer de chaque ligne de la chaîne. Par exemple, si le caractère de fermeture est en retrait de 2 onglets, le même montant sera supprimé de chaque ligne. Si la chaîne a une ligne sans espacement, le compilateur lève une erreur.

Chemins Clés

Des chemins de clé ont été ajoutés dans Swift 3 pour faciliter la référence aux propriétés d'un objet. Au lieu de référencer une clé d'objet avec un littéral de chaîne simple, les chemins de clé nous permettent d'appliquer un contrôle à la compilation qu'un type contient la clé requise, ce qui élimine un type courant d'erreur d'exécution.. 

Les chemins clés étaient un bon ajout à Swift 3, mais leur utilisation était limitée à NSObjects et ils ne jouaient pas vraiment bien avec les structures. Telles étaient les principales motivations de la proposition SE-0161 visant à actualiser l’API..

La communauté a accepté une nouvelle syntaxe pour spécifier un chemin clé: le chemin est écrit en commençant par un \. Cela ressemble à ce qui suit:

struct Conference var name = "" let city: String let nameKeyPath = \ Conference.name let wwdc = Conference (nom: "WWDC", ville: "San Jose") wwdc [keyPath: nomKeyPath] // "WWDC"

le nameKeyPath objet décrit une référence à la prénom propriété. Il peut ensuite être utilisé comme indice sur cet objet..

Si vous modifiez la variable de laisser à var de wwdc, vous pouvez également modifier une propriété spécifique via la syntaxe d'index de chemin d'accès clé.

wwdc [keyPath: nameKeyPath] = "AltConf" laissez nom = wwdc [keyPath: nameKeyPath] // "AltConf"

Gammes unilatérales

SE-0172 a proposé d’ajouter de nouveaux opérateurs préfixe et postfix pour éviter de répéter inutilement un index de début ou de fin quand il peut être déduit. Par exemple, si vous souhaitez inscrire un tableau du deuxième index au dernier, vous pouvez l'écrire de la manière suivante:

laisser nombres = [-2, -1, 0, 1, 2] laisser positifs = nombres [2… 

Auparavant, le endIndex devait être spécifié. Maintenant, une syntaxe plus courte existe:

laisser positif = nombres [2…]

Ou, si vous voulez commencer par l'index de départ:

laisser négatif = nombres [… 1]

La même syntaxe peut également être utilisée pour la recherche de motif dans un commutateur déclaration.

Indices génériques

Avant Swift 4, les indices étaient nécessaires pour définir un type de valeur de retour spécifique. SE-0148 proposait la possibilité de définir un seul indice générique qui déduirait le type de retour en fonction de la valeur de résultat définie. Mis à part l'annotation de type, cela fonctionne plus ou moins comme avant.

struct Conferences let conferences: [String: Any] // Renvoie les modèles de conférence en fonction de leur clé. indice(clé: String) -> T? retourne les conférences [clé] comme? T // Définissez le type de retour de la variable et accédez à l'objet via un indice. laisser chose: Conférence? = conférences ["WWDC"]

Comme vous pouvez le constater, cela améliore vraiment la lisibilité de vos objets dans les cas où vous devez y accéder via la syntaxe en indice..

Existentiels de classe et de sous-type

Une des fonctionnalités manquantes du système de types Swift à ce jour est la possibilité de contraindre une classe à un protocole spécifique. Ce problème a été corrigé dans Swift 4. Vous pouvez désormais spécifier le type d'un objet et les protocoles auxquels il doit se conformer, grâce au SE-0156. Vous pouvez, par exemple, écrire une méthode qui prend une UIView qui est conforme à la Rechargeable protocole avec la syntaxe suivante:

func reload (voir: UIView & Reloadable) 

Améliorations du dictionnaire et des ensembles

dictionnaire et Ensemble également reçu un rafraîchissement agréable dans Swift 4. Ils sont beaucoup plus agréables à utiliser grâce à quelques méthodes utilitaires qui ont été ajoutées.

mapValues

Le dictionnaire a maintenant un mapValues méthode pour changer toutes les valeurs, en évitant l’utilisation du générique carte méthode qui nécessite de travailler avec des tuples de clé et de valeur.

let conferences = ["WWDC": "Très bien", "AltConf": "Bien", "Firebase Party": "Très amusant"] // Carte sur toutes les valeurs du dictionnaire. let newConferences = conferences.mapValues ​​valeur dans la valeur de retour + "👍"

filtre Type de retour

le filtre la méthode retourne maintenant un objet du même type que vous filtrez avec.

// Le type de cette variable est [String: String] let wwdc = conferences.filter $ 0.key == "WWDC"

Valeurs par défaut pour la consultation du dictionnaire

Lorsque vous utilisez des dictionnaires, vous pouvez fournir une valeur par défaut lorsque vous utilisez la syntaxe en indice pour éviter de devoir dérouler ultérieurement une option.

// Valeur par défaut si la clé n'est pas trouvée. let talkShow = conferences ["Le Talk Show", par défaut: ""]

Initialisation du regroupement de dictionnaires

Enfin, un Dictionnaire (regroupement :) l'initialiseur a été introduit pour faciliter la création d'un nouveau dictionnaire en regroupant les éléments d'une collection existante selon certains critères. 

Dans les exemples suivants, nous créons un dictionnaire en regroupant tous les des conférences qui ont la même lettre de départ. Le dictionnaire aura une clé pour chaque lettre de départ dans le des conférences collection, avec chaque valeur composée de toutes les clés commençant par cette lettre.  

let dictionary = Dictionary (grouping: conferences.values) $ 0.uppercased (). first! 

Ressources

Si vous souhaitez approfondir les nouvelles fonctionnalités de Swift 4, voici quelques ressources supplémentaires:

  • What's New In Swift - Session 402 - WWDC 2017
  • Guide Apple Swift
  • Ole Begemann's Nouveautés de Swift 4 Playground
  • Guide de migration de Swift 4

Conclusion

Maintenant que vous avez examiné certaines des nouvelles fonctionnalités majeures de Swift 4, vous avez probablement hâte de commencer à les utiliser pour garder votre base de code fraîche et propre. Commencez à écrire votre nouveau code pour tirer parti des nouvelles fonctionnalités utiles et pensez à refactoriser une partie de votre code précédent pour le rendre plus simple et plus facile à lire..

Apprendre Swift

Nous avons créé un guide complet pour vous aider à apprendre Swift, que vous commenciez juste à vous familiariser avec les bases ou que vous souhaitiez explorer des sujets plus avancés..

Vous pouvez également consulter certains de nos autres articles sur le développement d'applications iOS.!