Swift est l’une des langues à la croissance la plus rapide de l’histoire, en raison de son élégance, de sa simplicité et de sa «sécurité par conception». En fait, le mantra officiel de Swift est de "rendre la programmation simple et facile possible." Dans cet article, vous apprendrez à utiliser Swift au maximum en restructurant votre code..
Bien que l'optimisation du code soit implicite et évidemment inhérente à la conception du langage, certaines stratégies de refactoring peuvent rendre votre code plus lisible, plus fiable et plus performant. Dans cet article, vous apprendrez huit façons de modifier votre code avec Swift 4..
Dans cet article, vous apprendrez comment optimiser et reformuler votre code avec Swift 4. Nous allons couvrir les éléments suivants:
Zip *: français
Tout d’abord, Swift 4 améliore encore les dictionnaires avec un moyen élégant de gérer les clés en double en utilisant la fonction générique Zip *: français
. Zip *: français
fonctionne sur plus que des dictionnaires, et en fait, il vous permettra de créer votre propre type de séquence à partir de deux collections sous-jacentes conformes à Séquence.
Par exemple, supposons que vous ayez un tableau avec les valeurs suivantes, en prenant note de deux éléments contenant la même clé:
let locations = ["Springfield", "Chicago", "Springfield", "Jackson"] var dictionnaire: Dictionnaire
En utilisant Zip *: français
, vous pouvez créer une séquence de paires uniques:
let emplacements = ["Springfield", "Chicago", "Springfield", "Jackson"] var dictionary = Dictionnaire (zip (locations, repeatElement (1, count: locations.count)), uniquingKeysWith: +) print (dictionnaire) / / ["Jackson": 1, "Chicago": 1, "Springfield": 2]
le uniquingKeysWith
Les éléments du code ci-dessus vous permettent de créer des valeurs uniques en utilisant un opérateur mathématique. Dans ce cas, nous utilisons +
incrémenter la valeur chaque fois qu'une entrée dupliquée est trouvée. Bien sûr, vous pouvez également décider d’utiliser votre propre logique d’incrémentation personnalisée..
Une autre fonctionnalité puissante de Swift 4 réside dans la possibilité de définir les valeurs par défaut des dictionnaires, en utilisant un indice ajouté récemment. Dans le code suivant, lorsque vous accédez à la valeur d’une clé dans le dictionnaire, la valeur renvoyée est un optionnel
value, qui retournera nil si la clé n'existe pas:
let locationsAndPopulations = ["Springfield": 115715, "Chicago": 2705000, "Aurora": 201110] print (locationsAndPopulations ["Springfield"]) // la valeur est facultative print (locationsAndPopulations ["New York"]) // cette clé n'existe pas, retourne nul
Normalement, vous devez gérer la possibilité de néant
dans les valeurs optionnelles, mais Swift 4 le rend un peu plus pratique pour vous, grâce à un nouvel indice qui vous permet d’ajouter des paramètres par défaut plutôt que de vous obliger à garder ou à dérouler les options.
print (locationsAndPopulations ["New York", par défaut: 0])
Dans ce cas, étant donné que nous n’avons pas d’entrée pour New York dans notre tableau initial, le paramètre par défaut 0 sera renvoyé. Vous pouvez également injecter une valeur dynamique par opposition à une valeur littérale statique si vous en avez besoin. fait un indice beaucoup plus puissant.
Swift 4 facilite également la fusion de deux dictionnaires grâce à l'utilisation de fusion (_: uniquingKeysWith :)
. Dans l'exemple suivant, nous fusionnons le deuxième dictionnaire dans le premier et en utilisant le paramètre nouvellement appris uniquingKeysWith
, nous pouvons nous assurer que tous les doublons seront traités s'ils se produisent:
var locationsAndPopulationsIL = [“Springfield”: 115715, “Chicago”: 2705000, “Aurora”: 201110] let location2 = [“Rockford”: 152871, “Naperville”: 141853, “Champaign”: 81055] locationsAndPopulationsIL.merge (location2, uniquingKeysWith: +) print (locationsAndPopulationsIL)
En l’absence de cette fonction, vous devrez normalement parcourir manuellement toutes les valeurs d’un dictionnaire et mettre en oeuvre une logique personnalisée pour la fusion de deux dictionnaires en un seul..
Outre la fusion de deux dictionnaires, vous pouvez également filtrer de manière dynamique un dictionnaire avec les résultats renvoyés dans un autre dictionnaire du même type. Dans cet extrait de code, nous filtrons le dictionnaire des localisations par une valeur spécifique, renvoyée sous forme de dictionnaire:
let locationsAndPopulationsIL = ["Springfield": 115715, "Chicago": 2705000, "Aurora": 201110] let filtermillionPlusPopulation = locationsAndPopulationsIL.filter $ 0.value> 1000000 imprimer (filtermillionPlusPopulation) // ["Chicago": 2705000]
Ainsi, au-delà du simple filtrage, vous pouvez également utiliser le filtre
fermeture pour fournir des filtres personnalisés qui aboutiront à un nouveau résultat de dictionnaire.
Si vous avez déjà sérialisé (et désérialisé) des données, il peut être très compliqué de devoir sous-classer des classes avec NSObject
, ainsi que la mise en œuvre NSCoding
. Avec Swift 4, vous pouvez sérialiser plus efficacement vos cours grâce à l'utilisation de Codable
. Ceci est particulièrement utile lorsque vous souhaitez persister en sérialisant un de vos objets personnalisés en un objet JSON, soit pour passer à une API, soit même pour persister localement en utilisant UserDefaults
:
// une classe à classer en classe Emplacement: Codable nom de chaîne: chaîne population de var: Int init (nom: chaîne, population: Int) self.name = nom self.population = population // créer une instance let chicago = Emplacement (nom: "chicago", population: 2705000) // sérialiser en JSON laisser jsonData = essayer? JSONEncoder (). Encode (chicago) // désérialise et affiche si data = jsonData let jsonString = Chaîne (data: data, encoding: .utf8) print (jsonString!) // "name": "chicago", " population ": 2705000
Comme vous pouvez le constater, en définissant votre classe ou structure sur Codable
, vous pouvez facilement sérialiser vos données sur JSON, les conserver quelque part et les désérialiser.
En passant aux tableaux, une autre fonctionnalité bienvenue de Swift 4 est la possibilité d’échanger deux valeurs directement dans des tableaux mutables, en utilisant swapAt (_: _ :)
. Cela serait très utile pour des fonctions telles que les algorithmes de tri, et il est extrêmement simple à utiliser:
var locations = ["Springfield", "Chicago", "Champaign", "Aurora"] emplacements.swapAt (0, 2) print (locations) // ["Champaign", "Chicago", "Springfield", "Aurora" ]
Auparavant, vous deviez utiliser des variables temporaires pour permuter entre deux emplacements d'élément, mais avec cette méthode, vous pouvez trier vos tableaux de manière plus concise..
Un autre ajout intéressant à Swift 4 est la possibilité de stocker des littéraux de chaîne de plusieurs lignes dans vos valeurs, ce qui facilite extrêmement la décomposition de votre contenu littéral pour qu'il soit plus présentable. Par l'utilisation de la notation "" "
pour ouvrir et fermer le bloc de texte, vous pouvez créer un contenu multiligne et même référencer des variables dynamiques, comme indiqué ci-dessous lors de l'ajout dynamique d'une date.
let illinoisIntro = "" "L’Illinois est un État du Midwest américain situé à la 5ème et 25ème place. Il est souvent considéré comme un microcosme du pays. Avec Chicago et ses banlieues au nord-est, de petites villes industrielles et une grande productivité agricole dans le centre et le nord de l’Illinois et des ressources naturelles comme le charbon, le bois d’œuvre et le pétrole dans le sud, l’Illinois a une base économique diversifiée et constitue un centre de transport majeur. (Source: Wikipedia - daté \ (Date ()) " "" print (illinoisIntro)
La nouveauté de Swift 4.2 est la possibilité de choisir des éléments aléatoires dans une collection avec le randomElement
une fonction. En fait, pas seulement les tableaux, mais tout objet conforme à la Collection
Le protocole peut utiliser cette fonction astucieuse. L'exemple suivant utilise notre tableau d'emplacement et imprimera une ville au hasard à partir de ce tableau:
let emplacements = ["Springfield", "Chicago", "Springfield", "Jackson"] laissez randomElement = locations.randomElement () print (randomElement!)
Dans cet article, vous avez appris certaines techniques utiles apportées par Swift 4 pour créer un code plus compact, plus ciblé et plus optimisé. Lors de sa quatrième itération, Swift a certainement progressé pour vous aider à reformuler votre code pour qu'il soit plus lisible et fiable. Swift 4.x n'est pas encore terminé et je vous encourage à suivre la page officielle de l'évolution de Swift pour prendre note de toutes les nouvelles propositions en cours de discussion..