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