Swift #6: Opcionales

Published: (December 9, 2025 at 02:29 PM EST)
2 min read
Source: Dev.to

Source: Dev.to

Opcionales

Algunas veces es necesario indicar la ausencia de valor de una variable. Para estos casos, Swift tiene el modificador ? que convierte cualquier tipo de dato en opcional. Una variable opcional puede tener un valor o estar vacía (su valor es nil).

var result: Int? // Asume nil por defecto
result = 1
result = nil

Inicialización diferida (Implicitly Unwrapped Optionals)

En ocasiones, una variable opcional siempre tendrá un valor cuando se use, pero no se sabe qué valor configurarle inicialmente. Estas variables opcionales se declaran con ! en lugar de ?, y son tratadas como requeridas cuando se usan dentro de una expresión.

var x: Int!
x = 3
var result = x * 2 // 6

No es necesario volver a usar ! al leer el valor de x.

Desempaquetado de opcionales

Desempaquetado forzado (Forced unwrap)

Solo cuando se está 100 % seguro de que el valor de un opcional no es nil, se puede extraer con !.

let optionalValue: Int? = 5
let value = optionalValue! // value: Int = 5

Optional Binding (if let/var, guard let/var)

Para verificar que el valor de un opcional sea distinto de nil y usarlo de forma segura, Swift ofrece la sintaxis de Optional Binding.

var optionalValue: Int? = 5
if let value = optionalValue {
    print(value)
}
if var value = optionalValue {
    print(value)
}

Reutilizando el mismo nombre

var value: Int? = 5
if let value = value {
    print(value)
}
if var value = value {
    print(value)
}

A partir de Swift 5.7, cuando el nombre de la constante/variable del Optional Binding coincide con el del opcional, la sintaxis puede abreviarse:

var value: Int? = 5
if let value {
    print(value)
}
if var value {
    print(value)
}

Uso con guard

guard let value else {
    return
}
guard var value else {
    return
}

Condiciones adicionales

var value: Int? = 5
if let value, value > 3 {
    print(value)
}

Nota: aunque el nombre sea el mismo, la constante/variable del Optional Binding y la opcional original son distintas en memoria.

Optional chaining

let optionalName = optionalValue?.name

Nil‑Coalescing (??)

Devuelve un valor por defecto si el opcional es nil.

let value = optionalNumber ?? 0

Pattern Matching (case let)

let optionalValue: Int? = 77
switch optionalValue {
case let value?:
    print(value)
case nil:
    print("nil")
}
Back to Blog

Related posts

Read more »

Swift #7: Tuplas

Tuplas Una tupla contiene un grupo de uno o más valores del mismo o diferente tipos. Es útil para almacenar valores efímeros o temporales que, aunque están rel...