Le novità del Linguaggio Swift 4.0. Tanti buoni motivi per aggiornarsi!

Giuro, non l’avrei mai detto! Questa volta, non vedo l’ora che rilascino la versione 4.0 del linguaggio Swift!

Ogni aggiornamento del linguaggio Swift è stato un vero e proprio caos generale. Tra sintassi che cambiavano in continuazione ad aggiornamenti strutturali delle classi/strutture Foundation. Tutti avevamo il timore di aggiornare i nostri progetti all’ultima versione.

La 4.0, finalmente, da tanti buoni motivi per cambiare. Dall’introduzione della serializzazione degli oggetti in JSON e viceversa, alle String multiline fino all’introduzione del key-path. 

Tante piccole modifiche che nel complesso cominciano a portare il linguaggio Swift a competere con linguaggi Enterprise come C#, C++ e Java!

Quindi, sei pronto a scoprire le novità del linguaggio Swift 4.0?
Allora cominciamo!

Download di Swift 4.0

Essendo ancora in beta non lo troverai di default su Xcode, devi scaricarlo manualmente.

Per farlo, comincia entrando nel sito ufficiale di swift.org, poi entra nella sezione Download/Snapshots. Scorri la pagina fin quando non troverai “Swift 4.0 Development“. Da lì, clicca su “Xcode” per scaricare la versione compatibile con il tuo IDE:

swift-4.0-le-novità

Una volta scaricato ed installato, apri Xcode. Spostati sul menu in alto e seleziona Xcode/Toolchains e seleziona la nuova versione di Swift:

utilizzare-swift-4.0-con-xcode-beta

Se avevi Xcode aperto durante il processo di installazione, chiudilo e riaprilo. Infine crea un nuovo Playground in modo da poter provare le novità.

JSON Encode e Decode

Partiamo dalla modifica in assoluto più interessante.

Per chi deve interfacciare la sua applicazione con una web app o BAAS come Firebase che restituiscono file JSON, sa benissimo quanto sia noioso e pieno di insidie trasformare il dato restituito dalla chiamata in un modello malleabile localmente.

Tutto parte dalla definizione del Model dei tuoi dati. Immaginiamo d’avere un’app che scaricare i blog post di un sito. Una volta create le strutture ti basterà fargli ereditare il protocollo Codable:

A livello di utilizzo non cambia assolutamente nulla. La creazione degli oggetti avviene sempre allo stesso modo, cioè invocando l’init:

JSONEncoder. Da Model a JSON

Vediamo adesso come trasformare velocemente questo oggetto post in un JSON.

Tutto parte della creazione del JSONEncoder:

Il JSONEncoder ti mette a disposizione il metodo encode(value: Codable) il quale accetta un oggetto la cui classe/struct implementi il Codable. Questo metodo è di tipo throws quindi va gestito con un do-try-catch:

L’encode restituisce un Data il quale all’interno contiene il JSON serializzato. A questo punto ti basta inviarlo tramite una URLSession o semplicemente stamparlo in console:

Che stamperà:

Semplice, facile ed indolore 😎

JSONDecoder. Da JSON a Model

Ipotizziamo di aver scaricato un blog post tramite una chiamata che ci restituisce il data contenente il JSON. A questo punto dobbiamo trasformarlo nel modello che lo rappresenta.

In nostro aiuto arriva l’oggetto JSONDecoderQuesto ti mette a disposizione il metodo decoder che accetta in ingresso il tipo di dato che fa da modello ed i dati che vuoi convertire in quel modello. La funzione restituisce un oggetto contenente i dati del json:

Anche qui, niente più guard, if let e compagnia bella!

L’unica regola da rispettare è quella che le proprietà della classe/struttura si chiamino allo stesso modo delle chiavi del json. Se ci sono dizionari annidati, questi devono essere rappresenti da una struttura/classe interna (come il caso dell’author).

String Multiline

Finalmente potremo scrivere stringhe senza l’aggiunta dei tag “\n” e compagnia. Ti basterà inserire tre virgolette “”” ad inizio e fine per attivare la possibilità di scrivere testo libero e su più linee.

L’unica regola è che dopo le virgolette si vada a capo in modo che il testo sia su una linea separata:

Swift metterà automaticamente i tag per la corretta visualizzazione. Questo è quello che vedrà l’app:

Questo è quello che vedrai tu:

stringhe multilinee swift 4

 

String come Collection di Character

Non si sa per quale oscuro motivo, ma da Swift 2 in poi hanno eliminato la possibilità di iterare una stringa. Fortunatamente in Swift 4 hanno fatto un revert della struct:

SwapAt su una MutableCollection

Adesso è possibile invertire due elementi in una MutableCollection  semplicemente definendo gli indici:

Range con un solo estremo

Adesso si possono estrarre gli elementi da una Collection definendo solamente uno degli estremi di un Range:

Utile nel caso in cui si volessero pescare, per esempio, gli ultimi elementi inseriti o i primi o gli intermedi di una collezione.

Modifiche ai Dizionari

Adesso puoi creare un dizionario partendo da un array:

La funzione zip prenderà ogni elemento e lo assocerà ad un numero che parte da 1 e viene incrementato fino all’indice N rappresentato dell’ultimo elemento della collezione. Infine la costruzione del dizionario lo trasformerà come tale.


Durante la fase di lettura,
cioè accesso ad una chiave, puoi definire un valore di default nel caso la chiave a cui stai provando ad accedere non esista:

Infine, puoi raggruppare i valori di un array in un dizionario definendo un tuo particolare filtro. Per esempio, quello di utilizzare come chiave la prima lettera dell’elemento dell’array:

Considerazioni

Ora che hai visto un po’ di modifiche, scommettiamo che aggiornerai anche tu al primo colpo? 💪

Dopo anni di sofferenze, adesso si comincia a vedere la luce! Ad ogni modo, se volessi tenere traccia degli aggiornamenti futuri, puoi farlo da qui. Se ne dovessero uscire altri interessanti, li aggiungerò a questo post.

Alcuni esempi di questo articolo sono stati presi dal tutorial di mindorks.com.

Buona Programmazione!

Changelog

  • 30/05/2017 – Prima versione del tutorial.

Start typing and press Enter to search

le novità di xcode 8 e swift 3