Nella lezione sulle var/let ti ho detto che le variabili sono dei contenitori di valori e, questi valori, tu potrai usarli per eseguire delle operazioni.
In che modo? 😱
Pensa, per esempio, ad un’applicazione per la lista della spesa.
Tutte le cose da comprare verranno messe dentro una variabile (una var speciale chiamata array, ci arriverai tra qualche lezione).
Durante l’utilizzo capiterà di dover aggiungere o rimuovere elementi da quella lista: cioè dovrai modificare quella variabile aggiungendo o rimuovendo dei valori.
Mi stai davvero dicendo che dietro un’app così complessa c’è una variabile?
Ci puoi scommettere!
Un’app, nella sua essenzialità è un insieme di var/let, le operazioni su queste ne determineranno il funzionamento.
So che ti vorresti già buttare nella mischia ma, prima di farti andare a schiantare contro un muro, devo mostrarti le basi: le operazioni fondamentali tra le variabili con il linguaggio Swift.
Sarebbero?
Dalle “semplici” operazioni matematiche (somma, sottrazione etc), passando per gli operatori speciali fino alle conversioni da un tipo all’altro.
Pronto? Mano al Playground perché stiamo per cominciare! 😎
Passaggio di valori
La prima operazione che voglio mostrarti è quella del “passaggio dei valori” tra le variabili e costanti (o viceversa, o var con var, var/let…).
Prendiamo un esempio:
var a: Int = 2
var b: Int = 5
var c: Int = 0
c = a
Dopo aver creato tre diverse variabili con tre diversi valori, ho assegnato la variabile “a” alla variabile “c”.
😱 Peppe, che significa “assegnare una variabile”?
Quando una variabile viene messa nel lato destro dell’uguale, il compilatore considera il valore contenuto al suo interno. Un po’ come se venisse aperta la scatola e preso il suo valore.
Quindi, all’istruzione “c = a”, è come se stesse avvenendo “c = 2” cioè un’assegnazione del valore 2 alla variabile “c”.
Attenzione a non confonderti.
Dato che “c” adesso contiene il valore di “a”, modificare “c” non corrisponderà a modificare “a” (o viceversa).
Le due variabili sono indipendenti l’una dall’altra anche se contengono lo stesso valore:
a = -2
print("a", a) // -2
print("c", c) // 2 -> c continua a contenere il valore 2
In pratica è come se nell’operazione “c = a”, vista poco fa, fosse stato clonato il valore contenuto in “a”. Quindi, anche se le due var hanno lo stesso valore rimangono due entità uniche e diverse.
Ma, com’è possibile? 🤔
Value Type e Reference Type
Il perché non si riesce a modificare “a” o “c”, modificando una delle due, dipende esclusivamente dal tipo di dato utilizzato.
I Type si differenziano in due famiglie:
- Value Type
- Reference Type
I primi, cioè i Value Type, sono quelli che usiamo e useremo in queste lezioni (Int, Double, String etc). Sono quelli che durante il passaggio da una var all’altra viene creato un nuovo valore (un clone).
I secondi, i Reference Type, saranno quelli che durante il passaggio verrà passato il riferimento: se passo “a” alla var “b”, modificare “b” corrisponderà a modificare “a” (o viceversa).
Ad ogni modo, quest’ultimi tipi di dato li vedremo nella parte finale del nostro corso (quando studierai la programmazione orientata agli oggetti, lì ti farò vedere come creare nuovi tipi di dato e come renderli reference type o value type).

Ripeto. Per il momento lavorerai sempre con i type fondamentali che sono Value Type. Gli altri li vedrai più avanti.
Comunque, se hai riscontrato dei problemi o qualsiasi cosa, scrivimi pure un commento in fondo alla lezione.
Istanziare nuovi Type da altri Type
Visto il passaggio di valori, la prossima operazione è quella che ti permetterà di creare nuovi valori partendo da tipi di dato differenti.
Per esempio, capiterà spesso di voler trasformare un valore Double in Int. Per farlo io dovrò utilizzare una sintassi particolare che prevede di:
- Scrivere il nome del type seguito dalle parentesi tonde
- Per poi inserire, all’interno delle tonde, il valore da trasformare
var x: Int = Int(73.66)
print(x) // dentro x c'è 73
Int(73.66) farà in modo di creare un nuovo Int con valore 73.
Perché si perde la virgola? 😱
Nella lezione dei Tipi di Dato ti ho detto che i numeri interi possono essere solo senza virgola. Quindi, la trasformazione eliderà la parte decimale (senza eseguire arrotondamenti).
Con questa sintassi nessuno vieta di passare una variabile all’interno delle parentesi tonde:
var a: Double = 9.99
var b: Int = Int(a) // b ha valore 9
Esercizio 0. Utilizza la stessa sintassi per trasformare un numero Int in Double.
Type e valori di default
La sintassi NomeTipo(), se viene lasciata senza valore all’interno delle tonde, permette di creare un’entità che parte con un valore di default.
Nel caso dei numeri, scrivere Int() o Double() equivarrà a creare il valore 0 e 0.0.
var x1: Int = Int() // 0
var x2: Double = Double() // 0.0
Nel caso delle stringhe, invece, il valore di default sarà la stringa vuota che è rappresentata dal valore “” (doppie virgolette senza valori all’interno).
var s1: String = String() // ""
Da numeri a String
A di là di queste conversioni, quella sicuramente più importante è la creazione di stringhe partendo da numeri.
Per esempio, nelle applicazioni, l’inserimento di un valore in un campo di testo viene considerato sempre come stringa (anche quando utilizzi il tastierino numerico). Quindi, capire come passare da String a numeri, risulterà di vitale importanza.
La conversione avviene in due modi:
- Il primo è utilizzando la sintassi String(numero)
- La seconda è più articolata ma permette di creare stringhe più complesse.
Il sistema “complesso” consiste nell’inserire il valore numerico all’interno della seguente stringa “\(numero)”. Esempio:
var number: Int = 500
var s: String = "\(number)"
L’operatore in questione è \() e, dato che puoi inserirlo all’interno di stringhe, puoi utilizzarlo anche più di una volta per creare stringhe più lunghe e che contengono più valori:
let age: Int = 25
let weight: Double = 70.50
let finalString: String = "La mia età è di \(age) e peso \(weight) kg"

Domande
Prima di proseguire oltre, ti lascio alcune domande per esercitarti:
- Scrivere Bool() che valore genera?
- Guarda l’esempio sotto, è scritto correttamente?
var name: string = "giuseppe"
var age = string(27)
- Prova a ricreare la seguente stringa “La mia età è di: 24. I termini e condizioni sono stati accettati: false” dove il valore 24 e il booleano false è la risultante di una conversione in stringa.
Gli operatori matematici
Se prima ti ho mostrato delle operazioni prettamente informatiche, adesso ti mostro le classiche operazioni matematiche che potrai applicare con il linguaggio Swift.
Gli operatori di base da utilizzare sono i seguenti:
2 + 2 // somma
4 - 6 // sottrazione
3 * 3 // moltiplicazione
6 / 2 // divisione
Anche se ne Playground puoi scrivere queste operazioni così per come te le ho mostrate, nella realtà, i risultati dei calcoli andranno sempre inseriti all’interno di variabili o costanti (perché si presuppone che poi dovrai utilizzare quel valore per fare “qualcosa”).
let somma = 2 + 2
let sottrazione = 4 - 6
let moltiplicazione = 3 * 3
let divisione = 6 / 2
Esempio calcolo IVA
Ed infatti, per fare un esempio più complesso, immaginiamo di voler calcolare l’IVA di un prezzo. Il calcolo, ci sono diverse formule, potrebbe essere quello di prezzo + (prezzo * IVA). Che si traduce in:
let iva: Double = 0.22
let price: Int = 50
let finalPrice = Double(price) + Double(price) * iva
print("il prezzo comprensivo di iva è \(finalPrice)")
Nota come nell’esempio ho convertito price in Double durante l’operazione (potevo mettere il price come Double già nella sua dichiarazione ma ho voluto metterlo Int solo per mostrarti questo caso).
Perché ho dovuto convertire da Int a Double?
Perché le operazioni devono avvenire tra valori dello stesso tipo (quindi o convertivo tutto in Int o tutto in Double).
Priorità delle operazioni
Come in matematica, le operazioni rispettano la priorità impartita dall’operatore utilizzato (prima moltiplicazione e divisione etc).
Nell’eventualità volessi scrivere un’operazione con delle priorità di calcolo definite da te, puoi utilizzare le parentesi tonde. Con le parentesi tonde, prima verranno eseguite le operazioni al suo interno e poi tutte le altre:
let op1: Double = 4 / (6 * 12) + 22
Se togli le tonde esce fuori un valore completamente diverso. Questo perché prima esegue il 6 * 12, poi la divisione ed infine la somma.
Le parentesi puoi utilizzarle anche in maniera composta, quindi parentesi possono contenere altre parentesi.
Somma di String
Le stringhe permettono di eseguire solamente l’operazione di somma:
let name: String = "giuseppe"
let surname: String = "sapienza"
let finalName: String = name + " " + surname
Nel calcolo del finalName ho inserito una somma con una stringa con uno spazio al suo interno. In questo modo il name non verrà attaccato al surname.
Questa operazione può tornare utile, per esempio, quando si inserisce un carattere per volta all’interno di un campo di testo e si vuole aggiungere ad una stringa.
Per il resto, quando magari ti serve compattare più stringhe in un’unica stringa io preferisco utilizzare l’operatore \():
let finalName2: String = "\(name) \(surname)"
Assegnazione ed operazione
Esistono degli operatori che permettono di eseguire un calcolo sul valore contenuto da una variabile e contemporaneamente aggiornare il suo valore.
Sono i seguenti:
+=
-=
*=
/=
Come si usano?
Immaginiamo d’avere una variabile Int che ha valore 0. L’utente preme un bottone e questa var deve essere incrementata di 1 ad ogni pressione. Quindi un qualcosa del genere:
var count: Int = 0
// l'utente preme il bottone
count = count + 1
print(count)
// l'utente preme il bottone
count = count + 1
print(count)
Cioè, ad ogni pressione, il valore contenuto dentro count viene sommato con 1 e, il risultato, viene assegnato nuovamente alla variabile.
Per velocizzare la scrittura di operazioni del genere puoi utilizzare gli operatori che ti ho mostrato più sù:
var count: Int = 0
// l'utente preme il bottone
count += 1
// l'utente preme il bottone
count += 1
La stessa identica logica potrai applicarla per gli altri operatori e lascio a te il compito di provarli.

Esercizio
Immagina di avere un conto in banca e di voler creare un’applicazione per eseguire prelievi e depositi.
- Crea, quindi, una variabile chiamata bankAccount con un valore di default di 400.0.
- Poi, crea una let chiamata prelievo con valore intero di 100.
- Infine, aggiorna il conto dopo aver eseguito il prelievo.
Fammi sapere come va nei commenti e per qualsiasi problema non esitare a scrivermi 😘
Se sei registrato al corso ti ricordo di completare gli esercizi della lezione per poter ottenere l’attestato di partecipazione.
Conclusione
Come avrai sicuramente notato, in queste lezioni, ti ho mostrato dei concetti basilari ma che ritroverai ovunque.
Al di là del linguaggio Swift e della tua voglia di creare app iOS, questi argomenti ti torneranno utili in tutti i linguaggi di programmazione.
Perché?
Nella maggior parte dei casi i linguaggi moderni si assomigliano tutti. Cambia qualche sintassi ma le operazioni di base rimangono e rimarranno sempre le stesse.
Capito uno, capiti tutti.
Per il resto, ci vediamo alla prossima lezione
e ti auguro una buona programmazione!