Semplicità. Se posso riassumere, con una parola, tutte le novità portate da Apple al WWDC 2016 allora quella parola è semplicità.

Quest’anno Apple ha lavorato pesante per rendere la vita più semplice a tutti gli sviluppatori. La nuova versione del linguaggio Swift, la 3.0, porta con se delle migliorie che renderanno i vostri codici più semplici, leggibili e meno frustanti da debuggare.

Se da un lato Swift 3.0 migliora ciò che sta sotto l’applicazione, dall’altro lato Xcode 8.0 rende tutte queste migliorie più semplici da attuare ed utilizzare.

Quindi, bando la ciance, vediamo insieme le novità di Xcode 8.0 e Swift 3.0!

Indice paragrafi

Swift 3.0! parola d’ordine, Semplicità

Vuoi un esempio lampante?

// swift 2.2
let stringa = "Ciao Xcoders"
stringa.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet())

Il codice, scritto con il linguaggio swift 2.2, rimuove dalla costante stringa lo spazio bianco o una nuova linea.  Come lo fa? utilizzando il metodo, della Struct String, chiamato stringByTrimmingCharactersInSet.

Con swift 3.0 tutta quella complessità, data soprattutto dal nome del metodo così lunga, viene convertita in:

// swift 3.0
let stringa = "ciao xcoders"
stringa.trimmingCharacters(in: .whitespacesAndNewlines)

Perché non l’hanno fatto prima?

Con la versione del linguaggio Swift 3.0 gli ingegneri Apple hanno ben pensato di ridurre la lunghezza dei metodi a favorire della leggibilità e comprensione delle funzioni stesse. Funzioni che, lo dico senza vergogna, venivano scartate a priori perché semplicemente troppo complesse da interpretare.

Nel dettaglio quello che hanno modificato è stato spostare un pezzo del nome del metodo/funzione come label dei parametri della funzione stessa.

Che cosaa?

Prendiamo in esame un altro esempio.

// swift 2.2
let xcoding = "1,2,3,4,5,6"
xcoding.componentsSeparatedByString(",")

Nell’esempio scritto in linguaggio Swift 2.2, la funzione componentSeparatedByString rimuove la la stringa “,” dalla costante xcoding e restituisce un array dove ogni posizione è occupata dall’elemento diviso dal metodo (fai una prova sul playground se non conosci questa funzione).

In Swift 3.0 il metodo è stato così modificato:

xcoding.components(separatedBy: ",")

Cioè quella parte del metodo, separatedBy, è stata spostata all’interno della definizione dei parametri della funzione.

Ma le modifiche non riguardano solo e solamente le strutture o classi proprie del linguaggio Swift. Tali modifiche sono state apportate anche ai metodi/funzioni e classi dei vari framework di iOS, macOS, watchOS e tvOS.

Oggi è la giornata degli esempi.

Uno dei metodi modificati della classe UIViewController, anche se quasi tutti sono stati ritoccati, è quello che permette di rimuovere una UIView o un altro UIViewController aperto mediante un segue o uno show.

In swift 2.2 si utilizza il dismissViewController:

// swift 2.2
dismissViewControllerAnimated(true, completion: nil)

In swift 3 un più simpatico ed intuitivo dismiss:

dismiss(animated: true, completion: nil)

Da questi semplici esempi puoi già notare come Apple abbia eseguito un’ottima spending review. Infatti, se trasferisci tutte queste modifiche ad un codice di 500 o più righe, ti rendi subito conto come l’estensione cambi in maniera drastica.

CGAffineTransformIdentity // swift 2.2
CGAffineTransform.identity // swift 3.0

CGAffineTransformMakeScale(2, 2) // swift 2.2
CGAffineTransform(scaleX: 2, y: 2) // swift 3.0

CGAffineTransformMakeTranslation(128, 128) // swift 2.2
CGAffineTransform(translationX: 128, y: 128) // swift 3.0

CGAffineTransformMakeRotation(CGFloat(M_PI)) // swift 2.2
CGAffineTransform(rotationAngle: CGFloat(M_PI)) // swift 3.0

Non sempre le modifiche adottate portano ad una riduzione del testo scritto. Ma questo non deve spaventarti.

Nell’esempio che vedi sopra, nelle funzioni del linguaggio C di trasformazione grafica di un elemento (ne ho parlato dettagliatamente nel mio corso sullo sviluppo di app per iOS) hanno semplicemente spostato un pezzo del nome all’interno dei parametri. In questo modo, è vero che sono leggermente più lunghe, ma hanno sicuramente reso più comprensibile il contenuto dei parametri.

Da UpperCamelCase in lowerCamelCase per Enum e Attributi

Uno dei concetti che più ribadisco all’interno del corso gratuito sul linguaggio Swift è quello di utilizzare le convenzioni note della programmazione generale per uniformare il codice agli standard più comuni.

Tra questi standard c’è quello di chiamare le Classi, Strutture ed Enumeratori con la prima lettera Maiuscola (UpperCamelCase). Questo permette di identificare immediatamente l’appartenenza di un oggetto ad una particolare tipologia di struttura sintattica.

Dall’altro lato, i nomi dei metodi, proprietà, funzioni e parametri dovrebbero essere scritte utilizzando la lettera minuscola (lowerCamelCase).

In Swift 2.2 e versioni precedenti, questa regola non veniva per niente rispettata.

UIInterfaceOrientationMask.Portrait // swift 2.2
UIInterfaceOrientationMask.portrait // swift 3.0

NSTextAlignment.Left // swift 2.2
NSTextAlignment.left // swift 3.0

SKBlendMode.Replace // swift 2.2
SKBlendMode.replace // swift 3.0

Non cambia assolutamente niente a livello di funzionamento ed esecuzione del codice, però, capisci bene che se spacci Swift 3.0 per snello e semplice, allora non puoi non modificare anche queste piccole cose.

L’importanza della grammatica

La grammatica come la matematica è qualcosa che non possiamo abbandonare una volta finita la scuola o l’università. Purtroppo!

Con il linguaggio Swift 3.0, Apple ha voluto marcare l’importanza di utilizzare un metodo scritto utilizzando un tempo al passato semplice (esempio: sorted) rispetto ad uno scritto al presente (esempio: sort).

Le guide ufficiali di Swift, Swift API guidelines, riportano le seguenti diciture:

  • Quando l’operazione è descritta in maniera natura dal un vergo, allora:
    • Usa il verbo al tempo imperativo per un metodo che modifica direttamente la proprietà
    • Applica al metodo il suffisso “ed” o “ing” per un metodo che non muta direttamente la proprietà
  • Preferisci il participio passato per descrivere il nome di una funzione che non modifica direttamente la proprietà
  • Quando l’operazione è descritta da un sostantivo, utilizza il sostantivo per il metodo che non modifica la proprietà e applica il prefisso “form” al metodo che modifica direttamente

Ti assicuro che è più semplice da capire guardando un altro esempio.

Gli array di Int, DoubleFloat String del linguaggio swift 2.2 potevano essere ordinati facilmente utilizzando il metodo sort. In particolare esistono due versioni di questo metodo: sort() e sortInPlace().

  • sort() restituisce un nuovo array ordinato, quindi non modifica l’array originale su cui è stato invocato.
  • sortInPlace() ordina direttamente l’array.

Mentre, con swift 3.0 ed in base alle nuove line guida, i metodi diventano così:

  • sort() è l’equivalente del vecchio sortInPlace(), cioè ordina e modifica direttamente l’array su cui è stato invocato il metodo.
  • sorted() è il vecchio sort(), cioè viene creato e restituito un nuovo array ordinato non modificando l’originale.

Sono modifiche che, per chi viene dalla versione precedente possono portare davvero in confusione.

Come regola empirica, quando viene aggiunto il suffisso “ed” vuol dire che il metodo non modifica direttamente l’elemento ma ne crea uno nuovo lasciando invariato l’invocante. 

Ad ogni modo non preoccuparti parecchio delle modifiche alla sintassi. Xcode 8.0 porta con se un ottimo strumento per convertire i vecchi codici in swift 3.

Le altre modifiche al linguaggio vengono discusse e rese come standard all’interno del corso gratuito sul linguaggio Swift. Vagli a dare un’occhiata ;)

La novità di Xcode 8

Anche Xcode 8 tende a semplificare notevolmente alcuni aspetti della vita di noi poveri sviluppatori. Questa volta non c’è che essere fieri delle modifiche apportate.

Solo per citarne alcune: la documentazione, una nuova gestione delle Size Class, un nuovo metodo per gestire i Certificati (EVVAI!), un tool per la gestione della memoria ecc. E ce n’è talmente tante che difficilmente riuscirai a vederle ed utilizzarle tutte.

Quindi, procediamo con ordine e diamo uno sguardo alle novità maggiori di Xcode 8!

Nuova Documentazione

Partiamo da qualcosa che ti renderà sicuramente più felice. La documentazione.

Parecchie volte mi contattano persone disperate perché non riescono a trovare “le cose” all’interno della documentazione Apple. Non li biasimo, è davvero confusionaria. Talmente confusionaria che Apple ha deciso di cambiargli veste e contenuto.

Con Xcode 8 arriva, finalmente, una nuova documentazione.

nuova-documentazione-xcode-8

Nuovo Font

Non c’è molto d’aggiungere. Nel Text Editor e più in generale con le nuove versioni di iOS, macOS, tvOS e watchOS, hanno cambiato il font nel nuovo San Francisco.

Nuovo Font San Francisco Xcode 8

In più, ma solo per chi c’ha mai fatto caso, è stata inserita la Code Line Highlighted. Ovvero, la linea in cui risiede il cursore del mouse è illuminata (nello screen la linea 19 è dove ho lasciato il cursore del mouse).

Auto completamente testo, selezione colore ed immagini

Quant’è brutto dover aggiungere un colore custom, da codice, ad un elemento? Oppure, quanto scassa la banana dover switchare dalla pagina del codice all’xcassets perché non ti ricordi il nome dell’immagine che vuoi assegnare ad una UIImageView?

Ed ecco che Xcode 8 pone fine ad ogni dramma.

Adesso, quando dovrai assegnare un nuovo colore ad un elemento, ti basterà digitare la parola Color Literal per attivare il Picker dei colori che lo genererà e lo passerà automaticamente con un sistema estremamente simpatico.

Mentre per quanto riguarda le immagini, dovrai scrivere il nome dell’immagine che vuoi utilizzare. Vedrai comparire una lista delle immagini che hai in locale con quel nome. La selezione creerà un oggetto UIImage con l’immagine in questione.

completamento-automatico-dei-colori-ed-immagini-xcode-8

Size Class

Le Size Class sono il sistema che utilizza Xcode per differenziare e modificare i vincoli di Auto Layout nelle varie dimensioni dei dispositivi.

Prima di Xcode 8, si modificava la Size Class utilizzando un bottoncino che si trovava ai piedi dello Storyboard. Di default, chi sceglieva di creare un’app Universal, si ritrovava come primo ViewController un quadrato dalle dimensioni di 600×600 Point. In poche parole, un casino.

Con Xcode 8 è stato rivoluzionato l’intero processo. Adesso non esiste più l’Universal Storyboard. Al suo posto trovi un ViewController con le dimensioni reali (espresse in Point) di uno dei dispositivi Apple.

Le Size Class continuano ad esistere con l’unica differenza che adesso vengono differenziate dalla dimensioni dei vari dispositivi.

nuova visualizzazione size class xcode 8

Al variare di una di queste Size Class cambieranno automaticamente tutte le dimensioni dei ViewController presenti nello Storyboard. In questo modo potrai vedere velocemente quali vincoli funzionano e quali vincoli no, permettendoti di modificarli in quella specifica Size Class in maniera ancora più veloce.

cambio-size-class-xcode-8

L’applicazione che vedi negli screen è l’app finale del corso di sviluppo applicazioni per iOS. Mentre per quanto riguarda l’Auto Layout e Size Class, presto aggiorneremo tutti i tutorial alle nuove versioni di xcode e swift.

Modifica elementi da qualsiasi fattore di Zoom

Una piccola feature che ti aiuterà nell’utilizzo dello storyboard ancora più semplice è lo Zoom scalabile a qualsiasi percentuale. Oltre a permetterti di scalare la percentuale di Zoom da circa 6% a 175% potrai inserire e modificare gli elementi da qualsiasi fattore di Zoom. Evitando così il fastidio di dover selezionare, zoomare nel VC ed infine modificare l’elemento.

Memory Graph

Un nuovo strumento è stato aggiunto ai tool di Debug. Si chiama Memory Graph e ti permetterà di navigare all’interno della memoria dell’applicazione.

Come lo fa? In maniera semplice ed intuitiva, trasformando i blocchi di memoria assegnati ad un particolare oggetto in Nodi. Ogni nodo poi sarà collegato ai suoi parenti stretti.

memory graph xcode 8

A cosa potrà servire realmente ancora non ho avuto modo di scoprirlo. Resta il fatto che è uno strumento interessante ed intrigante.

Certificati automatici

Non c’è cosa più frustrante di dover creare i certificati per la pubblicazione dell’applicazione, le notifiche e chi più ne ha più ne metta. Un vero incubo.

Con Xcode 8 tutto il procedimento è stato nettamente automatizzato. Adesso ti basterà andare nelle impostazioni generali dell’applicazione e cliccare sulla spunta Automatically manage signin per lasciare ad Xcode il compito di creare tutti certificati, i provisioning profiles, e l’identifier dell’applicazione.

creazione-automatica-certificati-xcode-8

Conclusione

Non c’è neanche bisogno che lo dica. Questa è solo un’infinitesima parte di ciò che sono le novità di Xcode 8 e Swift 3. Io ti ho voluto parlare delle maggiori o comunque delle più intuitive e semplici da utilizzare o apprezzare.

Il resto delle novità verrà man mano spiegato nei vari tutorial e corsi del sito man mano che verranno aggiornati alle nuove sintassi e specifiche.

Alla prossima e buona programmazione!