SwiftIntermedio8 oct 2025

El Retorno Inesperado del Optional

snippet.swift
func maybeInt() -> Int? {
    let number: Int? = 5
    guard let result = number else {
        return nil
    }
    return result
}

let value = maybeInt()
print(value)

¿Qué crees que imprime?

Salida Esperada

Optional(5)

⚠️ Salida Real

Optional(Optional(5))

¿Por qué pasa esto?

Swift, a veces, nos sorprende con sus Optionals. 🤯 Aquí, `maybeInt()` debería retornar un simple `Optional(5)`. Pero, ¿qué ocurre? ¡Tenemos un `Optional(Optional(5))`! 😵‍💫 ¿Por qué? 🤔 - `number` ya es un `Int?`. ¡Es un optional! - El `guard let result = number` desempaqueta `number` si no es `nil`. - Pero, ¡aquí viene lo jugoso! Al hacer `return result`, Swift *vuelve a envolver* `result` en un Optional porque la función `maybeInt` retorna `Int?`. Es como envolver un regalo ya envuelto. 🎁 ¡Optionalception! La solución es simple: no uses `guard let` si ya tienes un optional. O, mejor aún, simplifica el código para que sea más legible. ¡Menos código, menos problemas! 😉

Conceptos relacionados

optionalsguardunwrapping