Guard Let
Parte de la sección Fundamentos del Journey de Swift de Coddy — lección 13 de 86.
Mientras que if let desempaqueta un opcional y ejecuta código cuando existe un valor, guard let adopta el enfoque opuesto: sale temprano cuando falta un valor. Esto es especialmente útil dentro de funciones donde deseas manejar primero el caso "malo" y mantener limpia la lógica principal.
func greet(name: String?) {
guard let unwrappedName = name else {
print("No name provided")
return
}
print("Hello, \(unwrappedName)!")
}
greet(name: "Taylor") // ¡Hola, Taylor!
greet(name: nil) // No se proporcionó ningún nombreLa sentencia guard let comprueba si name tiene un valor. Si no lo tiene, se ejecuta el bloque else y la función finaliza con return. Si el opcional contiene un valor, se desempaqueta en unwrappedName — y aquí está la diferencia clave con if let: la variable desempaquetada permanece disponible para el resto de la función, no solo dentro de un bloque.
Este patrón de "salida temprana" mantiene tu código legible al manejar los casos de error de antemano, para que la lógica principal no esté anidada dentro de múltiples sentencias if.
Desafío
FácilEscribe una función validateAge que tome un parámetro opcional age y utilice guard let para desempaquetarlo de forma segura.
Si la edad es nil, devuelve "Invalid age". De lo contrario, devuelve "Age: [value]" donde [value] es la edad desempaquetada.
Parámetros:
age(Int?): Un entero opcional que representa la edad de una persona
Devuelve: Un string — ya sea "Invalid age" si la entrada es nil, o "Age: [value]" con el valor desempaquetado.
Ejemplo: Si age es 25, devuelve "Age: 25". Si age es nil, devuelve "Invalid age".
Hoja de referencia
Usa guard let para desempaquetar un opcional y salir temprano cuando falta un valor:
func greet(name: String?) {
guard let unwrappedName = name else {
print("No name provided")
return
}
print("Hello, \(unwrappedName)!")
}La sentencia guard let comprueba si el opcional tiene un valor. Si no lo tiene, el bloque else se ejecuta y sale de la función con return. Si el opcional contiene un valor, se desempaqueta y permanece disponible para el resto del ámbito de la función.
Este patrón de "salida temprana" maneja los casos de error de antemano, manteniendo la lógica principal limpia y sin sangría.
Pruébalo tú mismo
func validateAge(age: Int) -> String {
// Escribe el código aquí
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4Operadores Parte 1
Operadores aritméticosOperador de móduloAsignación compuestaResumen - Matemáticas simplesOperadores de comparación7E/S Básica
Función PrintInterpolación de StringsEntrada ReadLineConversión de TiposRepaso - Hasta 120Repaso - Verdadero o Falso10Funciones
Declarar una funciónParámetros y argumentosValores de retornoEtiquetas de argumentosResumen - Función SigmaResumen - Función de validaciónValores por defecto13Iterar sobre secuencias
Iterar sobre elementosEl método enumerateIterar sobre cadenas P1Iterar sobre cadenas P22Variables
Let vs VarAnotaciones de tiposNúmerosStringsBooleanosConvenciones de nomenclaturaResumen - Inicializar variables5Operadores Parte 2
Operadores lógicos Parte 1Operadores lógicos Parte 2Repaso - Lógica simpleOperadores lógicos Parte 3Operador ternario8Calculadora para dividir la cuenta
Mensaje de bienvenidaObtener la entrada de datos11FizzBuzz con un giro
Descripción general del juegoLa función FizzBuzz3Opcionales
Qué son los opcionalesDesempaquetado con If LetGuard LetOperador de coalescencia nulaResumen - Desempaquetado seguro6Toma de decisiones
Sentencia IfIf - ElseRepaso - Calculadora simpleSentencia SwitchSwitch con rangos9Bucles
Bucle For-InBucle WhileBucle Repeat-WhileBreakContinueRepaso - FactorialRangos en buclesBucle anidadoRepaso - Entrada dinámica