Els optionals són una característica poderosa i essencial de Swift que permeten gestionar l'absència de valors. En aquest tema, aprendrem què són els optionals, com es declaren, com es desempaqueten i com es poden utilitzar de manera segura.

Què són els Optionals?

En Swift, un optional és un tipus que pot contenir un valor o nil (cap valor). Els optionals són útils per representar situacions on un valor pot estar absent.

Declaració d'Optionals

Per declarar una variable o constant com a optional, s'utilitza el signe de pregunta (?) després del tipus de dada.

var nombre: String? // Pot contenir un String o nil
var edat: Int? // Pot contenir un Int o nil

Assignació de Valors a Optionals

Els optionals poden ser inicialitzats amb un valor o amb nil.

var nom: String? = "Joan"
var edat: Int? = nil

Desempaquetament d'Optionals

Per utilitzar el valor d'un optional, primer cal desempaquetar-lo. Hi ha diverses maneres de fer-ho:

Desempaquetament Forçat

El desempaquetament forçat s'utilitza quan estem segurs que l'optional conté un valor. S'utilitza el signe d'exclamació (!).

var nom: String? = "Joan"
print(nom!) // Joan

Nota: El desempaquetament forçat pot causar un error en temps d'execució si l'optional és nil.

Desempaquetament Segur (Binding d'Optionals)

El binding d'optionals és una manera segura de desempaquetar un optional. S'utilitza la instrucció if let o guard let.

if let

var nom: String? = "Joan"

if let nomDesempaquetat = nom {
    print(nomDesempaquetat) // Joan
} else {
    print("El nom és nil")
}

guard let

func imprimirNom(_ nom: String?) {
    guard let nomDesempaquetat = nom else {
        print("El nom és nil")
        return
    }
    print(nomDesempaquetat) // Joan
}

imprimirNom("Joan")

Desempaquetament Implicit

Els optionals amb desempaquetament implícit (!) es desempaqueten automàticament quan s'utilitzen. Són útils quan estem segurs que l'optional sempre contindrà un valor després de ser inicialitzat.

var nom: String! = "Joan"
print(nom) // Joan

Operador de Coalescència Nil

L'operador de coalescència nil (??) proporciona un valor per defecte si l'optional és nil.

var nom: String? = nil
let nomPerDefecte = nom ?? "Nom desconegut"
print(nomPerDefecte) // Nom desconegut

Exercicis Pràctics

Exercici 1

Declara una variable optional de tipus String anomenada ciutat i assigna-li el valor "Barcelona". Desempaqueta-la de manera segura i imprimeix el valor.

var ciutat: String? = "Barcelona"

if let ciutatDesempaquetada = ciutat {
    print(ciutatDesempaquetada) // Barcelona
} else {
    print("La ciutat és nil")
}

Exercici 2

Declara una variable optional de tipus Int anomenada edat i assigna-li el valor nil. Utilitza l'operador de coalescència nil per assignar un valor per defecte de 18 i imprimeix el resultat.

var edat: Int? = nil
let edatPerDefecte = edat ?? 18
print(edatPerDefecte) // 18

Exercici 3

Escriu una funció anomenada imprimirSalutacio que prengui un optional de tipus String anomenat nom com a paràmetre. La funció ha de desempaquetar el nom de manera segura i imprimir una salutació. Si el nom és nil, ha d'imprimir "Hola, desconegut!".

func imprimirSalutacio(_ nom: String?) {
    if let nomDesempaquetat = nom {
        print("Hola, \(nomDesempaquetat)!")
    } else {
        print("Hola, desconegut!")
    }
}

imprimirSalutacio("Joan") // Hola, Joan!
imprimirSalutacio(nil) // Hola, desconegut!

Errors Comuns i Consells

  • Desempaquetament Forçat: Evita utilitzar el desempaquetament forçat (!) a menys que estiguis absolutament segur que l'optional conté un valor. Això pot causar errors en temps d'execució.
  • Oblit de Desempaquetar: Recorda sempre desempaquetar els optionals abans d'utilitzar-los. Utilitza el binding d'optionals (if let o guard let) per fer-ho de manera segura.
  • Utilització de Coalescència Nil: Utilitza l'operador de coalescència nil (??) per proporcionar valors per defecte i evitar errors quan els optionals són nil.

Conclusió

Els optionals són una característica fonamental de Swift que permeten gestionar l'absència de valors de manera segura i eficient. Hem après com declarar, desempaquetar i utilitzar optionals, així com alguns errors comuns a evitar. Amb aquesta base, estàs preparat per avançar cap a temes més complexos en Swift.

© Copyright 2024. Tots els drets reservats