Creo que la mayoría de los problemas se derivan de no entender completamente qué opciones le proporcionan, y también de las diferentes técnicas en código que Swift ofrece sobre cómo usar las opciones.
En primer lugar, ¿qué resuelven los opcionales? Esto proporciona una construcción para que una variable sea un valor, o nada. Cuando encontré opciones por primera vez, pensé “¿por qué importa esto?” En el objetivo-c puedo declarar una variable, y también podría ser nula. La utilidad de los opcionales se me ocurrió una vez que me di cuenta de la condición opuesta: cualquier variable que no sea opcional no debería ser nula, y eso es enorme desde la perspectiva del compilador, y se puede detectar el error de tiempo de ejecución típico de esperar un valor, pero obtener nil durante el tiempo de diseño.
Aquí hay algunos enfoques típicos de las opciones que puede usar dentro de su código Swift. Comencemos con algunos enlaces opcionales y muestremos múltiples formas de hacerlo:
- ¿Qué son los derechos de Xcode?
- ¿Qué determina el éxito de una aplicación de iPhone?
- ¿Cómo afectará la edad a nuestro programador iOS?
- ¿Dónde puedo encontrar un gran desarrollador de iOS para que sea cofundador?
- ¿Qué es Grand Central Dispatch y cuál es su propósito principal?
si deja someValue = self.val1 como? Cuerda {
si deja otro valor = self.val2 como? Cuerda {
// hacer algo con someValue y anotherValue ya que en este momento se garantiza que existen
}
}
// reduciendo el if anidado
si deja someValue = self.val1 como? Cadena, deje anotherValue = self.val2 como? Cuerda{
// OK genial, puedo hacer mis enlaces opcionales en 1 línea de código
}
// usando la guardia
guardia deja someValue = self.val1 como? Cadena, deje otro valor como? Cadena más {
// abortar ya que los valores esperados no están presentes
regreso
}
// Puedo usar someValue y anotherValue de forma segura gracias al guardia
Una vez que comencé a usar la declaración de guardia, realmente comencé a disfrutar lo que ofrecía. Principalmente menos complejo ya que no hay más anidamiento.
Por lo general, trato de no usar el desenvolvimiento forzado, a menos que sea absolutamente seguro (verá opciones implícitamente desenvueltas al agregar salidas de referencia para un objeto dentro de Interface Builder, por ejemplo)