Queda cada vez menos tiempo hasta el lanzamiento del curso 
"iOS Developer" , por lo que hoy continuamos publicando material de la serie "10 preguntas sobre Swift". La primera parte de la cual se puede 
leer aquí .

¿Explicar los genéricos en Swift?
Los genéricos (plantillas genéricas) le permiten escribir funciones y tipos flexibles y reutilizables que pueden funcionar con cualquier tipo. Puede escribir código que evite la duplicación y exprese su propósito de manera clara y abstracta.
Los tipos Array y Dictionary en Swift son colecciones universales (genéricos).
En el siguiente código, se utiliza una función universal para intercambiar dos valores para una cadena y un entero. Este es un ejemplo de código reutilizable. 
func swapTwoValues<T>(_ a: inout T, _ b: inout T) { let temporaryA = a a = b b = temporaryA } var num1 = 4 var num2 = 5 var str1 = “a” var str2 = “b” swapTwoValues(&num1,&num2) swapTwoValues(&str1,&str2) print (“num1:”, num1)  
¿Cuáles son los tipos opcionales en swift y cuándo deben usarse?
Opcional (Opcional, "opcional") en Swift es el tipo en el que el valor puede o no ser. Las opciones se indican agregando "?" a cualquier tipo
Opciones para usar el opcional:- Fragmentos de código que pueden fallar (esperaba algo, pero no recibí nada).
- Objetos que actualmente están vacíos pero que pueden convertirse en algo más tarde (y viceversa).
Un buen ejemplo de un opcional:Una propiedad que puede o no estar presente , como un segundo nombre o esposo / esposa en la clase Persona.Un método que puede devolver un valor o nada , por ejemplo, coincidir en una matriz.Un método que puede devolver un resultado o un error y no devolver nada , por ejemplo, intenta leer el contenido de un archivo (como resultado de lo cual generalmente se devolverán los datos del archivo), pero el archivo no existe.Delegue las propiedades que no siempre tienen que establecerse y generalmente se establecen después de la inicialización.
Como enlaces débiles en las clases . Lo que señalan se puede configurar en cero en cualquier momento. 
Si necesita una forma de averiguar cuándo se establece el valor (datos aún no cargados> datos) en lugar de utilizar una variable booleana dataLoaded independiente. 
¿Qué es el encadenamiento opcional en Swift?
Los procesos de solicitud, invocación de propiedades, subíndices y métodos para un opcional, que puede tener el valor "nulo", se definen como una secuencia opcional (cadena opcional) .La secuencia opcional devuelve dos valores:
- si la opción contiene un "valor", cuando se invocan las propiedades, métodos y subíndices asociados, se devuelve el valor
- si un opcional contiene "nil", todas las propiedades, métodos y subíndices asociados con él devuelven nil
Una secuencia opcional es una alternativa al desempaque forzado.
¿Qué es el desenvolvimiento forzado?
El desempaque forzado es una forma de 
recuperar el valor contenido en una opción. Esta operación es peligrosa porque básicamente le está diciendo al compilador: estoy seguro de que esta opción contiene un valor real, ¡extráigalo!
 let value: Int? = 1 let newValue: Int = value!  
¿Qué es el desenvolvimiento implícito?
Desempaque implícito : cuando definimos una opción desempaquetada implícitamente, definimos un contenedor que forzará automáticamente el desempaque cada vez que lo leamos.
 var name: String! = “Virat” let student = name  
Si la opción implícitamente desempaquetada es nula e intenta acceder a su valor empaquetado, arrojará un error de tiempo de ejecución. El resultado es exactamente el mismo que si colocara un signo de exclamación después del habitual opcional, que no contiene un valor.¿Qué es la encuadernación opcional?
Puede desempaquetar las opciones de forma "segura" o "insegura". Una forma segura es usar carpetas opcionales.
El enlace opcional se usa para determinar si un opcional contiene un valor y, de ser así, haremos que ese valor esté disponible como una constante o variable de tiempo. Por lo tanto, no hay necesidad de usar un sufijo. para acceder a su valor.
 let possibleString: String? = "Hello" if let actualString = possibleString {  
¿Qué es un Guard y cuáles son sus beneficios?
La declaración de 
guard es simple y poderosa. Comprueba alguna condición y, si se evalúa como falsa, se ejecuta la instrucción else, que generalmente finaliza el método.
 func addStudent(student: [String: String]) { guard let name = student["name"] else { return } print("Added \(name)!") guard let rollNo = student ["rollNo"] else { print("roll No not assigned") return } print("Assigned roll no is \(rollNo).") } addStudent(student: ["name": "Ravi"])  
La ventaja de la 
guard es 
una ejecución más rápida . 
Guard bloqueo 
Guard se ejecuta solo si la condición es falsa y se saldrá del bloque a través de una declaración de transferencia de control como 
return , 
break , 
continue o 
thrown . Esto proporciona una salida anticipada y menos paréntesis. La salida anticipada significa una ejecución más rápida.
Consulte 
este artículo para obtener más información.
¿Cuándo se debe usar guard let y cuándo se debe if let ?- Use la guardcuando desee eliminar entradas inesperadas / incorrectas y concéntrese en el objetivo si tiene formas alternativas de manejar las entradas.
- Use el bloque guardifelsepara reducir el anidamiento y la sangría, ya que es relativamente compacto.
¿Qué es defer ?
La 
defer usa para ejecutar un conjunto de declaraciones justo antes de que la ejecución del código abandone el bloque actual.
La 
defer dentro del bloque 
if se ejecutará primero. Esto es seguido por el patrón LIFO para ejecutar las declaraciones de 
defer restantes.
 func doSomething() { defer { print(“1”)} defer { print(“2”)} defer { print(“3”)} if 1<2 { defer { print("1<2")} } defer { print(“4”)} defer { print(“5”)} defer { print(“6”)} }  1<2 6 5 4 3 2 1 
¿Enumerar qué operadores de transferencia de control se utilizan en Swift?
break : la instrucción 
break finaliza la ejecución de la declaración de flujo de control completo de inmediato.
continue : la instrucción 
continue le dice al ciclo que pare lo que está haciendo y que comience nuevamente al comienzo de la siguiente iteración del ciclo.
return : devuelve valores de funciones.
throw - necesita reenvío de error usando funciones de lanzamiento
fallthrough : la declaración 
fallthrough utiliza en el bloque de mayúsculas y minúsculas para ejecutar la declaración de caso, que se encuentra junto a las declaraciones de caso correspondientes según los requisitos del usuario.
En 
fallthrough swift el operador de 
fallthrough utiliza para ejecutar el siguiente caso, incluso si no coincide con el original.
 let integerToDescribe = 5 var description = “The number \(integerToDescribe) is” switch integerToDescribe { case 2, 3, 5, 7, 11, 13, 17, 19: description += “ a prime number, and also” fallthrough case 10: description += “ case 10.” default: description += “ an integer.” } print(description) 
El final de la segunda parte. La primera parte se puede 
leer aquí .
Estamos a la espera de sus comentarios y recordamos que dentro de unas horas habrá una 
jornada de puertas abiertas , en cuyo marco hablaremos en detalle sobre nuestro curso.