Uso de return y guard
Clase 31 de 33 • Curso de Programación en Swift (2019)
Contenido del curso
Clase 31 de 33 • Curso de Programación en Swift (2019)
Contenido del curso
Hernán Chilabert
Luis Felipe Carrasco Galindo
Rafael Gutierrez
Eduard Neira Salcedo
jean pierre gabriel nieto acosta
Victor Hugo Morales Mendoza
- -
Yael Manuel Flores Cornejo
Gera Meraki
Yael Manuel Flores Cornejo
Raúl Gallego Alonso
Luis Alberto Moreno Perez
Jaime David Burbano Montoya
Andrés Antonio Azuara Portillo
Resumen
El guard se utiliza dentro de una función para realizar un unwrapping de los opcionales. Si encuentra nil dentro, finalizará la función, bucle o cualquier condición usada.
Cómo se utiliza
guard let surname = person["surname"] else { return }
El uso del guard let se lee de la siguiente manera:
Si alguien puede crear (let) la variable ”surname” a partir de person[“surname”], guard transfiere el control después de las llaves "{}" (fuera de su scope).
Caso contrario, se finaliza con return .
Ejemplo:
var people = ["name": "Juan Gabriel", "age": 31, "isMale": true] as [String : Any] func testUserValidation(person:[String:Any]) { guard let surname = person["surname"] else { /* En este punto no se pudo crear la constante `surname` porque la key “surname” no existe en el diccionario `people`. */ print("El apellido es desconocido") return } // Aqui existe surname print(surname) guard let age = person["age"] else { print("La edad es desconocida") return } print("La edad de la persona es \(age)") } testUserValidation(person: people)
El resultado de esta función es:
El apellido es desconocido
Porque entra en el else del primer guard, imprime el mensaje y corta la ejecución de la función con el return.
Si agregamos la siguiente linea justo antes de la llamada a la función:
people["surname"] = "Gomila" testUserValidation(person: people)
la salida en consola es:
Gomila La edad de la persona es 31
que buen resumen, gracias
después de analizar un poco el código, no entendí el por que del uso de "person", en ningún lugar esta definido y Menos inicializado ese tal "person", la única variable definida es "people", por lo tanto no se usa el "person", en su lugar pon "people", después de ir usando al pie de la letra .... no me funciono para nada, solo se quejaba el Xcode, hasta que me di cuenta del uso de "person" y people y así me quedo el código:
var people = ["name": "Juan Gabriel", "age": 31, "isMale": true] as [String : Any]
func testUserValidation(people:[String: Any]){ // <-- aqui
guard let surname = people["surname"] else { // <-- aqui print("No encontramos a nadie") return } print(surname) guard let age = people["age"] else { // <-- aqui print("El nombre de la persona es desconocido!") return } print("La edad de \(surname) es \(age) anios ")
}
testUserValidation(people: people) // <-- aqui
me fue complejo entender este tema ( Return y Guard ) 😦
ve el tema como un validator, valida y no te deja seguir sin un valor. piensalo como un modulo de autenticacion
¿Solo no realiza la siguiente línea o todo lo que venga después?
Creo que es muy rebuscado la existencia del guard, un simple if let hace lo mismo, y es mas facil de implementar y leer.
Guard: Si existe tal cosa, ejecuta la siguiente iteración de la función. Si no, cae en bloque de códigos del else
"Si existe tal cosa; haz esto. Si no, haz esto..."
Return: Devolver un valor de una función y lo finalicé...
No se preocupen por no entenderlo del todo el return, se verá más a fondo en el curso Swift Funciones
gracias, me quedo un poco mas claro con tu explicación y me quedo tranquilo con retomarlo en el siguiente curso
Gracias por el comentario. Éxitos en el camino, Gerardo 😄
Buenos dias/tardes dev:
Estoy practicando tal y como explica el profesor como siempre hago y en el minuto 6:50 del video la explicación de Guard y Return... a mi no se me imprime tal y como le sale al profesor Juan Gabriel... Será por la versión de Swift..? Tengo la ultima versión de Xcode 14.3 y viene con Swift 5.8 y con macOS 13.4, puede ser por eso o tengo algo mal en mi código que no consigo de ver. Gracias por su tiempo.
Otra forma de declarar seria asi:
var people : [String : Any] = ["Name" : "Alberto Moreno", "age" : 23, "isMale" : true]
Porque toda esta cantidad de codigo, para algo que puede ser un if?
var people = ["name" : "Andres", "age" : 23, "surname": "Antonio"] as [String : Any]; func getSurnameIfExists(plp: [String : Any]) -> Any{ guard let surname = plp["surname"] else{ return ""; } return surname; } var result = getSurnameIfExists(plp: people); print(result);
Me gustó mucho esta clase, justamente cuando vimos el if let... me preguntaba "habra alguna manera de usar el valor fuera de los corchetes del if?"