0 of 18 lessons complete (0%)
Swift Tour: Le basi

Metodi e proprietà dei tipi di dato. La vera forza dei Type

This is a preview lesson
Purchase this course, or sign in if you’re already enrolled, to take this lesson.

Abbiamo visto che i Tipi di Dato del linguaggio Swift ci permettono di descrivere valori che appartengono ad un determinato insieme.

Gli Int rappresentano la famiglia dei numeri senza la virgola, i Double quella dei reali… Ma, se si limitassero solo a questo, non servirebbero poi a granché 😂

I Type, oltre a descrivere i valori, mettono a disposizione delle funzionalità che potrai utilizzare sulla var/let per svolgere dei compiti specifici.

Un po’ come se fossero dei particolari insiemi composti da due sotto insiemi.

Eh? 😱

Da un lato ci sono i valori che puoi utilizzare e, dall’altro lato, dei “codici” che potrai richiamare per svolgere delle operazioni.

Peppe, non ho ancora capito!

Ti faccio un esempio.

Nel caso in cui volessi calcolare il numero di caratteri presenti dentro una stringa, tu non dovrai scrivere un codice ad hoc.

Bensì, potrai utilizzare una proprietà (ti spiegherò meglio tra poco) che ti restituirà il numero di elementi presenti nella stringa.
Cioè attiverai un codice, presente all’interno del type, che svolgerà l’operazione di conteggio per te.

Se proprio non resisti, ecco un assaggio ⤵️

Esempio metodi e proprietà dei tipi di dato del linguaggio swift

Queste “funzionalità” si dividono in due famiglie: Metodi e Proprietà.

Alt, alt, alt partiamo con calma 🤔

Accedere ai metodi e proprietà

Apri il Playground e crea una variabile di tipo String:

var text: String = "Ciao, mondo!"

Dato che text è una var di tipo String, potrai utilizzare i metodi e proprietà messi a disposizione dal type.

Per potervi accedere dovrai scrivere il nome della variabile seguita da un punto. Se tutto va per il verso giusto, si aprirà il seguente pannello:

Accedere ai metodi e proprietà dei tipi di dato linguaggio swift

Al suo interno ci sono tutti i metodi e le proprietà del tipo String.

Sono tantissimi!

Per evitare di doverli studiare uno per uno, cosa che obiettivamente non ho fatto nemmeno io, devi attenzionare alcuni elementi che ti permetteranno di comprenderne l’utilizzo.

Il pannello è diviso in tre colonne, più una barra in basso.

  • La barra in basso ti spiega brevemente cosa fa l’elemento selezionato in blu.
    • Esempio: Nel mio screen, mi sta dicendo che l’append(c: Character), che è il nome di questo metodo, aggiunge un carattere alla stringa (cioè alla var text).

Da qui intuiamo anche che nell’ultima colonna ritroviamo scritto il nome del metodo o proprietà.

  • Nella colonna al centro, invece, è riportato un tipo di dato (capiremo tra poco a cosa si riferisce).
  • Nella colonna a sinistra (dove compare il simbolo M o V), infine, viene elencato il tipo di elemento:
    • M: Method o metodo.
    • V: Variable o proprietà (perché si dice proprietà lo spiego nelle lezioni della programmazione orientata agli oggetti – per ora non fa nessuna differenza).
Metodi e Proprietà dei tipi di dato linguaggio swift

Qual è la differenza tra metodo e proprietà del linguaggio Swift?

Per il momento solo nell’utilizzo. I metodi sono leggermente più complessi.

Quando arriverai alla programmazione orientata agli oggetti ti chiarirò questa differenza (perché imparerai a creare tuoi tipi di dato e quindi creerai metodi e proprietà personali).

Adesso, vediamo un po’ di esempi.

Metodi e proprietà delle String

I metodi e le proprietà che ti mostrerò appartengono al type String. Ti mostro quelli di questo tipo perché sono i più interessanti 😎.

Ti ricordo che ogni tipo, del linguaggio Swift, ha i suoi metodi e proprietà. Quindi, quelli che vedrai adesso potrebbero non essere presenti negli altri tipi.

Cominciamo!

Count, il numero di caratteri

Scorri in basso nel pannello e fermati alla proprietà count. Count, ci suggerisce l’assistente, restituisce il numero di elementi presenti all’interno della stringa.

Selezionalo ed avvia l’esecuzione del codice:

la proprietà count delle stringhe linguaggio swift

Il Playground, adesso, mi segnala che alla riga 3 (nel mio esempio) corrisponde il valore 12. 12 è il numero di elementi presenti all’interno della stringa contenuta dentro la var text (se li conti, ci sono 12 caratteri – lo spazio conta come carattere).

Se ora riapri il pannello, dei metodi e proprietà, e torni alla voce count noterai che nella riga centrale ti sta dicendo che count è un Int.

count linguaggi swift

Questo puoi leggerlo come: “la proprietà count restituisce un valore Int” oppure “la proprietà count è un Int” (tra le due interpretazioni preferisco la prima).

V sta per variabile (o proprietà). Quindi, possiamo anche dire che count è una variabile di tipo Int.

Seleziona la parola count e se fai triplo tap con il trackpad, oppure selezionali la voce Help/Show Quick Help for Selected Element, si aprirà un altro pannello che ti mostrerà cos’è realmente la proprietà count:

count e quick help linguaggio swift

Il { get } sta ad indicare che la variabile count non può essere modificata (anche se è una variabile – il perché lo capirai nelle lezioni della programmazione orientata agli oggetti).

Infatti, se provi a modificarla salta fuori un errore:

text.count = 50 // ERRORE
Metodi dei tipi di dato, esempio count linguaggio swift

Catena d’elementi

Quando scrivi nomeVar.nomeProprietà, il Playground e poi Xcode considererà tutta l’espressione in base all’ultimo elemento della catena (si possono scrivere anche catene con più elementi).

Questo vuol dire che, se conserviamo la text.count all’interno di una var/let, quest’ultima prenderà il tipo dell’ultimo elemento della catena:

let x = text.count

In questo esempio, x è una costante di tipo Int perché count è una var di tipo Int.

isEmpty, piena o vuota?

Vuoi vedere un altr’altra proprietà?

Sempre nell’ambito delle String, apri quel pannello e cerca la proprietà isEmpty. 

A questo punto, già da solo dovresti riuscire a comprendere cosa fa e come utilizzarla:

let text: String = "Ciao, mondo!"
text.isEmpty

La var isEmpty è di tipo Bool, quindi restituisce un booleano che sarà:

  1. true se la stringa è vuota, cioè non ci sono dei valori (deve avere come valore “”).
  2. false se è piena, cioè c’è almeno un carattere al suo interno.

Domanda. text.isEmpty, senza avviare l’esecuzione, restituirà un valore true o false?

Append, aggiungere nuovi valori

Le proprietà sono abbastanza semplici da utilizzare. Una volta capito il tipo di dato e cosa fanno il gioco è fatto.

Le cose danno un po’ di rogna sono i metodi 😂.

Ma anche qui, se capisci come interpretarli, capito uno capiti tutti.

Partiamo da un metodo semplicissimo, che ci fornisce il type String, chiamato append.

Ci sono diverse versioni, noi utilizzeremo quella che ha come sintassi .append(other: String):

Append String linguaggio Swift

L’append aggiunge una nuova stringa alla stringa su cui viene invocato il metodo.

Generalmente, un metodo, è composto da tre parti:

  • nome: che viene messo prima delle parentesi tonde (nel nostro caso append).
  • parametri: le informazioni da inserire all’interno delle parentesi tonde.
    • possono essere più di uno, oppure assenti. Nel caso dell’append, c’è un solo parametro.
    • i parametri, se più di uno, sono divisi da una virgola.
  • tipo restituito: cosa restituisce il metodo. Il metodo può restituire un valore, similmente a quanto visto nel count, oppure nessun valore.
    • l’append è un metodo che non restituisce valori. Il type sulla colonna centrale è Void. Void significa nulla.

Proviamo ad usarlo?

Non appena cominci a scrivere, all’interno delle parentesi tonde ti chiede di inserire un valore. Questo valore deve essere del tipo elencato dal parametro.

Nell’append il type del parametro è String, quindi dovrai inserire una stringa:

var text: String = "ciao"
text.append(" come stai?")
print(text) // cia come stai?

In questo modo la stringa ” come stai?” verrà aggiunta alla fine della stringa contenuta dentro la var text.

In pratica va a modificare direttamente la variabile aggiungendogli un nuovo valore.

Domanda. Cosa sarebbe accaduto se invece d’avere una var avessimo avuto una let? Ti sai dare una spiegazione?
Se hai dei problemi, scrivimi pure un commento in fondo alla lezione 😘

Uppercased e Lowercased

Sempre rimanendo tra i metodi e proprietà delle String vediamone un altro paio (Si 😅, i metodi delle String sono quelli più interessanti).

Ti dicevo che un metodo può restituire qualcosa all’esterno.

Nel caso dei due metodi lowercased() ed uppercased(), questi restituiscono una String come risultato della loro operazione:

Metodo lowercased e uppercased delle string linguaggio swift

Nei dettagli, subito dopo le parentesi tonde, è riportata una freccia con accanto il Tipo di Dato. Questo sta ad indicare il type del valore restituito.
Nel particolare:

  • lowercased restituisce una nuova stringa con tutti i caratteri in minuscolo.
  • uppercased restituisce una nuova stringa con i caratteri in maiuscolo.

Quindi, questi particolari metodi non vanno a modificare la var, su cui vengono invocati, ma creano un nuovo valore partendo da quello della var.

Non so se hai notato: questi due metodi non hanno parametri. Quindi non dovrai inserire nessun valore all’interno delle tonde.

Capire i Metodi

Ti ho fatto vedere che le proprietà, quelle con il simbolo V, sono delle particolari variabili (che possono eseguire dei calcoli).

Ma i metodi? 🤔

Se apri il Quick Help sul metodo append, ti dice che questa è una func. Func sta per function e tutti i metodi sono delle func:

Metodi dei tipi di dato swift

Se var ti ha permesso di creare delle variabili, allo stesso modo la keyword func ti permetterà di creare funzioni (lo vedrai tra qualche lezione).

Mutating func

I metodi si dividono in due gruppi: mutating e non mutating. Nel nostro esempio, il metodo append è una func di tipo mutating:

utilizzo mutating func linguaggio swift

Mutating sta ad indicare che il metodo muterà, cioè modificherà, il contenuto della variabile su cui viene utilizzato.

Quindi, se dovessi incontrare altri metodi di tipo mutating adesso sai che andranno a lavorare sul contenuto della variabile.

Per questo motivo la scatola deve essere una var e non una let.

Non mutating func

Dall’altro lato, i metodi che hanno scritto solo la keyword func sono di tipo non mutating (e la scritta non viene riportata nel Quick Help).

Questi, quasi sempre, restituiscono un valore all’esterno (come nel caso di lowercased ed uppercased).

Label del parametro

Ci sono dei metodi in cui, all’interno delle tonde va inserita anche una scritta in più al valore.

Per esempio, se prendi il metodo distance di un numero Int, durante il suo utilizzo inserirà un nome all’interno delle tonde:

metodo distance to e label metodi linguaggio swift

La sintassi vuole che dentro le tonde tu scriva l’etichetta “to:” e poi il valore.

Se ci fai caso, nella dichiarazione della func distance, dentro il parametro ci sono due etichette “to other:“. Quando un metodo è scritto in questo modo vuol dire che dovrai inserire la prima etichetta durante il suo utilizzo.

Nel caso dell’append, questo non è avvenuto perché ha come nome della prima etichetta un underscore “_ other:“. Ed il simbolo _ previene l’inserimento della label:

Metodi dei tipi di dato swift
Metodi come utilizzarli linguaggio swift

Esercizio

Esercizio 0. Un’app ha un campo di testo che permette l’inserimento del proprio numero di telefono. Il numero di telefono ha questo formato:

var telNumber: String = "+45 3401234567"
var isItalian: // continua il codice

Utilizza il metodo hasPrefix delle stringhe per capire se il numero ha un prefisso italiano (+39) o meno. Dopo l’utilizzo devi essere in grado di stampare il seguente messaggio: “numero: \(telNumber), ha prefisso IT: \(isItalian)“.

Ti ricordo che registrandoti al corso hai accesso anche agli esercizi per sbloccare l’attestato.

Conclusione

Con i metodi e proprietà hai finalmente un quadro generale di cosa sono i Tipi di Dato e come si utilizzano appieno le variabili e costanti del linguaggio Swift.

Dalla prossima lezione comincerai a studiare nuove keyword ed a scrivere codice più complesso (finalmente 😝).

Per il resto, qualsiasi problema, puoi scrivermi un commento qui sotto.

Buona Programmazione!