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.
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..
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é..
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.
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 à
NSObject
s 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 à laprénom
propriété. Il peut ensuite être utilisé comme indice sur cet objet..Si vous modifiez la variable de
laisser
àvar
dewwdc
, 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 à laRechargeable
protocole avec la syntaxe suivante:func reload (voir: UIView & Reloadable)Améliorations du dictionnaire et des ensembles
dictionnaire
etEnsemble
é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ériquecarte
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 retourle
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 ledes 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.!