Swift Map Filter Reduce mémo

Lorsque l’on pense opérations sur des types Array ou Dictionary en Swift, on a souvent le réflexe for-in loop… Mais Swift propose d’autres méthodes comme map, filter, reduce… potentiellement plus efficaces. Voici donc un petit mémo à ce sujet 🙂

Map

Map sert à parcourir une collection er à appliquer la même opération à chaque élément de cette collection. La fonction map retourne un array contenant le résultat. Dans l’exemple suivant, la fonction map est utilisée pour retourner le carré de chaque item d’un tableau :

Le type de retour de la fonction map n’est pas limité au type des éléments d’origine :

Et enfin, la fonction map peut être utilisée sur tout type de collection :

Filter

La fonction filter parcourt un array ou une collection et retourne un array contenant les éléments correspondant à la condition demandée. Ex: recherche des entiers divisibles par 2:

Reduce

Reduce sert à combiner tous les éléments d’une collection pour créer une nouvelle valeur. Dis comme cela, ce n’est pas très parlant, mais voici quelques exemples :

  • Ajouter toutes les valeurs d’un array à une valeur initiale de 15 :
  • Fusionner des chaînes :

flatMap et compactMap

  • flatMap :
  • compactMap :

En résumé :

  • map permet de retourner un array contenant le résultat d’une transformation appliquée à chaque item.
  • filter retourne un array contenant seulement les éléments correspondant à une condition donnée.
  • reduce retourne une seule valeur calculée en combinant chaque item avec une valeur initiale.

Un dev iOS au pays de Mac OS

Cela faisait un petit moment que je n’avais pas publié d’articles. Je vous rassure, je n’étais pas perdue au milieu du désert de Gorafe, mais plutôt en plein projet… macOS.

J’ai en effet eu le bonheur de contribuer à un projet mac OS écrit en Swift, et cela m’a donné l’occasion de me frotter un peu plus sérieusement à Cocoa et consorts… et d’en faire un petit retour d’expérience 🙂 .

Venant tout droit du dev iOS, donc d’UIKit, de prime abord, cela ressemble énormément. On remplace tout ce qui est UI par NS (ex : UITextField devient NSTextField) et ça repart… pas très loin justement 😦

En effet, on s’aperçoit vite que toute la syntaxe est un poil différente. Par exemple, pour changer le texte dans un champ texte, sous UIKit, on utilise la syntaxe : monJoliTextFielt.text = « Bonjour » Et sous Cocoa, la syntaxe est monJoliTextField.stringValue = « Bonjour »

Ces petites différences, ajoutées à un certain manque de documentation en ligne (en tous cas pour Swift) comparé à iOS font que le développement peut parfois devenir un peu… lent 😦 Il faut parfois (souvent) adapter la syntaxe ObjectiveC à Swift, et ça prend du temps… Vive StackOverflow !

Mais franchement, une fois assimilé, la programmation d’une application Mac OS en Swift devient franchement plaisant.

En tant que dev iOS et donc utilisateur Xcode, je retrouve la construction d’interfaces par storyboards. Là encore, les éléments ne sont pas exactement les mêmes, mais avec un peu de patience et de recherches, on s’y retrouve. Et pour le reste, cela reste du Swift.

Du coup, si j’étais au départ un peu anxieux par rapport au fait de passer de mon iOS « chéri » à Mac OS, je me suis rapidement pris au jeu et je serais maintenant partant pour recommencer sur un autre projet Mac OS 🙂

Et puis, il ne faut pas oublier qu’encore une fois, Apple pense à nous faciliter la vie avec le projet Marzipan, depuis renommé Catalyst :). Donc si tout va bien, d’ici quelques temps, on ne se prendra plus la tête à développer une application pour iOS ou Mac OS, mais on développera une application tout cours !

Bon pour le moment, je vous laisse, j’ai des applis à mettre à jour pour iOS et iPad OS 13 🙂

Programmation Swift : iOS Developer Notes For Professionals

ios Dev Pros

Voici mon nouveau livre de chevet : iOS Developer Notes for Professionals !

Je crois que tout le langage Swift est abordé dans ce livre ! Cela va de la création toute simple d’une UIView au parsing de JSON, tout en passant par l’usage de des frameworks les plus utilisés (Fastlane…) et des designs paterns (MVC, MVVM…).

Bref, le top du top pour le développeur Swift !

Bon, finalement, le lire avant de s’endormir n’est pas forcément la meilleure idée, mais c’est le genre de livre à garder impérativement sous la main toute la journée de développement !

En plus, il est gratuit !

A télécharger (sans modération) ici :

iosDeveloperBook

L’application mobile iOS « Kayak Tracker »

Un carnet de bord pour toutes vos activités nautiques : kayak, canoë, rafting, sup… Grâce à l’application Kayak Tracker, vous pouvez suivre votre sortie en temps réel, l’enregistrer et la commenter, et même suivre vos données cardiologiques (grâce à l’Apple Watch) !


Kayak Tracker est une application destinée à tous les fans de kayak, canoë, rafting, windsurf, kitesurf, stanup padle voile, yatchning… Bref, tous les accros aux sports d’eau.

Transformez votre iPhone en véritable carnet de bord pour vos sorties en kayak, canoe, rafting…

Avec cette application jolie et simple d’usage, vous pouvez :

  • Savoir à tous moment où vous vous trouvez, la distance que vous avez parcourue et le temps écoulé.
  • Pour chaque parcours, vous retrouvez la distance parcourue, la durée totale de trajet, la vitesse maximale et la vitesse moyenne ainsi que le dénivelé.
  • Vous pouvez personnaliser vos sorties ne ajoutant des photos (jusqu’à 3) et des commentaires.
  • L’application vous communique également les conditions météo du lieu où vous vous trouvez, et celle de l’endroit où vous comptez aller.
  • Grâce à votre Apple Watch, vous retrouverez également vos données cardiologiques dans vos parcours (courbe cardio, bpm max, min et moy).
  • Toujours grâce à votre Apple Watch, vous commandez toutes les fonctions utiles de l’ampli (start, stop sauvegarde, position…) sans sortir votre iPhone ! Plutôt pratique pour éviter de lui faire prendre un bain 🙂

Cerise sur le gâteau, pas besoin de compte, toutes vos données sont stockées dans votre téléphone, pour le plus grand respect de votre vie privée !

Kayak tracker est conçue pour fonctionner en arrière plan sur votre téléphone lorsque vous enregistrez un parcours, et est optimisée pour une gestion de l’énergie optimale (testée sur des randonnées de 6 heures sans problème). Vous la lancez au début de votre randonnée, et vous l’oubliez jusqu’à la fin de la promenade !

Attention, les sports d’eau sont potentiellement dangereux pour votre matériel, et rappelez-vous que vous les faites pour votre entière responsabilité. Soyez prudent.es ! Le développeur de cette application ne saurait être tenu pour responsable d’aucun dommage pouvant arriver à votre Apple Watch ou votre iPhone. Utilisez une Apple Watch série 2 au minimum (modèles étanches) et mettez toujours votre téléphone dans un sac étanche !

Application à télécharger sur l’App Store :

Bonnes navigations !


Git Memorandum

Comme pour tous.tes les développeur.ses, Git fait partie de mon quotidien… Et comme tous.tes les développeur.ses, il m’arrive aussi de galérer avec Git 😦 .

C’est pourquoi j’ai décidé de créer ce billet de blog « Aide mémoire », destiné aussi bien aux débutant.es qu’au utilisateur.ices averti.es… Article sur lequel je partagerai bien entendu mes petites galères et mes (grandes) solutions !

Lire la suite

Tutoriel Swift : formatage de numéros de téléphones avec PhoneNumberKit

PhoneNumConverterExample

Dans le cadre de mon activité de freelance, j’ai récemment dû répondre à une offre dans laquelle il était demandé :

 

– De créer un champ texte intégrant un numéro de téléphone

 

– Ce champ texte devra formater le numéro de téléphone pour avoir le même affichage que dans l’appli « Contacts » d’Apple.

 

– Le formatage doit se faire dans les normes locales de chaque pays.

 

– Puis le numéro de téléphone doit, toujours en fonction de la localisation, être converti à la norme E164.

 

– L’utilisation de frameworks externes est autorisée.

 

– Forcément, il faut réaliser tout cela pour moins de 5 euros et en 5 mn 😦 …

 

Comme j’ai trouvé le challenge intéressant (et avec l’espoir de facturer à un tarif un peu plus décent…), je me suis penché sur la question.

La première option qui m’est venue à l’esprit est de partir d’une « page blanche », et de tout coder. Après tout, filtrer et formater des entrées utilisateur n’est pas bien compliqué.

Oui mais pour que cela fonctionne pour tous les pays, cela devient nettement plus gourmand en temps et en neurones…

C’est ainsi que j’ai découvert le génialissime framewok « PhoneNumberKit« 

Lire la suite

Tutoriel Swift : Initiation aux tests unitaires

skills-3371153_1920

« Tester, c’est douter ! », oui mais souvent, douter évite de grosses boulettes !!

C’est pour cela que j’ai décidé de publier une série de tutoriels sur les tests unitaires en programmation Swift.

Mais voyons en premier ce qu’est un test unitaire et quel est son but !

Lire la suite