Skip to main content
Numbers

Trasformare un Array con il metodo map in Swift

Dopo aver visto come filtrare un array in Swift, in questo post esamineremo il metodo map e la tecnica della concatenazione.

Il metodo map della Struct array permette di ottenere un array di un certo tipo U a partire da un array di tipo T.

In altre parole questo metodo permette di convertire gli elementi presenti nell’array di partenza applicando la logica che andremo a indicare in una closure.

Il metodo map

Costruiamo un array di Int.

Il metodo map disponibile nella Struct array è dichiarato come segue.

  • T è il tipo degli elementi dell’array di partenza.
  • U è il tipo degli elementi dell’array che otterremo.
  • transform è: una funzione che riceve come parametro un elemento di tipo T e restituisce un elemento di tipo U.

Nulla vieta che T e U siano lo stesso tipo.

Scriviamo una funzione transform che riceve un intero e ritorna lo stesso valore incrementato di 100.

Applichiamo la funzione makeBigger a ogni elemento di numbers.

E’ importante notare che numbers è una costante (let) e che map non modifica gli elementi dell’array di origine. Semplicemente restituisce un nuovo array contenente i nuovi elementi.

Infine ricordiamo che quando in Swift un metodo richiede come parametro una funzione, possiamo anche utilizzare una closure, possiamo evitare di dichiarare la funzione nel codice e scrivere la logica direttamente in una closure.

Nel codice precedente la closure è racchiusa tra parentesi graffe e rappresenta la logica che map applicherà a ogni elemento dell’array sorgente per ottenere il nuovo array.

Infine $0 rappresenta il parametro passato dal metodo map alla nostra closure. Map provvederà ad applicare la nostra logica su ogni elementi dell’array sorgente.

Ottenere un Array di un nuovo Tipo

Nell’esempio precedente sia l’array sorgente erano di tipo Int. Il metodo map ci permette di ottenere un array di destinazione avente un tipo differente.

Vogliamo ora usare map per trasformare questo array di String in un array di Int.

Il risultato che abbiamo ottenuto è un array di Int? (ovvero optional Int). Questo perché nella closure stiamo restituendo il risultato di toInt() il cui tipo di ritorno è, appunto, Int?

Però possiamo risolvere il problema in 2 step:

  1. filtriamo gli elementi nil
  2. effettuiamo un force-cast degli elementi rimanenti da Int? a Int

Concatenare map e filter

I metodi map e filter, ripetiamo, non modificano l’array sui cui vengono invocati. Al contrario restituiscono un nuovo array.

Questo ci permette di concatenare le chiamate di questi metodo in modo da ottenere un codice più compatto.

Conclusione

Se qualcosa non vi è chiaro oppure volete suggerire l’argomento del prossimo post scrivetemi nei commenti.

Infine se trovate il post utile condividetelo con i pulsanti social qui sotto.

Trainer • Developer • Writer

Luca Angeletti

Trainer • Developer • Writer

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *