Optional Binding
Clase 18 de 22 • Curso de Introducción a Swift (2019)
Contenido del curso
Andrés Antonio Azuara Portillo
Francisco Angel Núñez Luna
Victor Manuel Lagunas Franco
Andrés Carrillo
Israel Acosta García
Adrian Peralta
Andrés Rivera Galo
Luis Abdel Rangel Castro
oscar ortiz
Johan Stivens Suarez Galindo
Iván Frías Gil
Omar Daniel Centeno
Fernando Molano Castrillón
Raúl Martin
Ricardo Ramos Hernandez
Rafael José Tellez Vizcaino
Jerry Ontiveros Mendoza
Diesan Romero
Jherom Chacon
Luiggy Tamayo
Julio Rodriguez Reategui
Gera Meraki
Jerry Ontiveros Mendoza
jose taveras
Gera Meraki
Elvis Milan
Juan Rodrigo de la Cruz García García Briseño
Carlos Arturo Pimentel
Andre Bezada
"Esta sintaxis la carga el diablo" las mejores frases jajajaja
Yo entiendo "Optional Binding" como: una estructura que comprueba que el uso de "Force Unwrapping" no vaya a romper el código, mediante la unión del "Optional" con una contante (let).
En si no rompe el codigo, lo que rompe es la aplicación en tiempo de ejecución
Hay alguna diferencia entre esto y los guard?
En el guard, el código siguiente de dicha condición no se ejecutaría ya que se usa un return. En el if sí, entra o no entra al if o else, el código sigue su ejecución.
Se podría usar un return en el if let, por supuesto, pero por buena práctica, en ese caso mejor usar un guard.
Los Guards solo se pueden utilizar dentro de funciones
Los Guards hacen un return automático al no ser valida la asignación, por eso funcionan dentro de las funciones.
Los Guards sirven para “proteger” el código que continua a ellos, y evitar ejecutar código de forma innecesaria. (es decir: no valida = sales de la función y no continuas).
El cuerpo del guard es el contenido a retornar en caso de dar error (no ser valida) ó alguna operación previa a hacer el return.
Al Optional Binding entras: si la asignación fué exitosa
Al Guard entras: si la asignación NO fué exitosa (un error ó invalida).
sintaxis de guard:
guard let name = Int("4") else { return }
Me parece mas facil el** Optional Binding** que el **force unwrapping **pero las dos formas estan muy bien.
Que bonito es lo bonito!!!
optional binding es la vinculación de dos variables dentro de la estructura de un if
En Swift importa la identación?
Yo lo que no entiendo en este caso es: Que se está evaluando dentro del if para que pueda ser true o false, es decir:
let firstNumber = Int("4") devuelve un true? Y si es así, por qué devuelve un True?
Según entiendo, está evaluando que la conversión del string a entero para guardarlo en una variable letse pueda realizar. Si esa conversión se realiza con éxito (al no ser nulo), y además, se evalúa si es > o < entre las variables. Si todo eso es verdad, entonces...
Saludos
Hola, mira cuando dices Int("4") básicamente le estas diciendo, 'Oye, agarra ese String ("4") y saca lo que hay dentro y mira si es un número. Si si lo es pues devuelve True y si no lo es pues devuelve False'.
Entonces si tú recibes un String "4" y sacas el 4 y evaluar si es un número pues tendrás un True pero si lo que recibes en el String es "Fernando" o "cuatro" o " "(espacios) pues todos esos evaluados no serán un número Int así que regresará False.
como se pone el and ese ?Estoy desde una máquina virtual y no soy capaz de encontrarla
Que teclado tienes ?
Excelente explicación quedó mas claro.
Puede ser muy util el realizar varios casting en un solo if, separando cada operacion o comparacion por una simple coma ','
The optional binding is the safest way to unwrap an optional value. That´s it :D
//Unwrap implicit, es decir variables no nulas fuertemente tipadas let possibleString: String? = nil//"Un String opcional" //let forcedString: String = possibleString!//Nunca hacer esto sin la validacion let highlyTypedS: String! = "Valor" let implicitString: String = highlyTypedS let forcedStringTernary: String! = possibleString != nil ? possibleString! : "Default value"
//------Optional binding-------// //Estructura para usar el valor no optional de una variable sin hacer el uso de el force unwrapping //se crea otra constante a partir de la variable optional// if let convertedLet = convertedVar { print("la variable 'convertedVar' no es nula, se puede usar 'convertedLet' de valor \(convertedLet)") type(of: convertedLet) print(convertedLet) }//convertedLet es la variable convertedVar pero sin valor optional, se puede usar su valor solo en la estructura "if" establecida
Por qué es que al momento de imprimir firstNumber y secondNumber no aparece: Optional(4) < Optiona(42) < 100 Como ocurrió en el ejemplo de la constante "convertedAge" antes de aplicarle Force Unwrapping (convertedAge!)?
Hola Julio, porque en efecto se puede realizar la conversión y estamos trabajando con la "nueva variable" . En el ejemplo anterior volvíamos a llamar la variable que era opcional y después la "nueva" ya convertida.
al usar la sentencia if no se ocupa el doble = porque no es un booleano lo que se valida, o el intento de casteo vendria siendo el valor booleando que se valida?
el intento de casteo vendria siendo la operación booleana que se está validando
El casteo viene siendo el valor que valida, estamos acostumbrados a trabajar con el == para hacer una prueba lógica a dentro de un if, pero en este caso manejamos el if de una manera diferente. Esta un poco revoltoso al inicio pero te recomiendo ver esta clase las veces que consideres necesarias.
nah!
no es más fácil de testear la segunda opción de los múltiples ifs? así puedes saber qué variables no están pasando la condición, en cambio con la otra solamente durante la condición de todas pasa algo, mientras que en las otras puedes hacer cosas en cambio de que se cumpla a medias la condición
Otra coincidencia encontrada, Rust también utiliza el if let para utilizar el valor desempaquetado de un tipo option.
Binding : generar una variable a partir de otra