¿Cuáles son los problemas comunes que enfrentan las personas con las opciones Swift?

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:

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)

Creo que el problema más común es no entender la puntuación. La manera simple de pensarlo es que el ‘?’ es “hacer una pregunta” y el ‘!’ es “saber la respuesta”. Usas el ‘?’ cuando no está seguro si el Opcional no es nulo, y usa ‘!’ cuando sabes que el Opcional no es nulo.

Otro error común es usar una cadena que no se ha desenvuelto:

let foo: String? = “bar” // crea una cadena opcional
print (foo) // impresiones sin envolver “Opcional (” bar “) \ n”
print (foo!) // impresiones sin envolver “bar”

Otro problema es que los valores del diccionario son siempre opcionales a pesar de que la declaración no tiene indicación (es decir, no usa ‘?’):

var myDictionary = [String: String] = [:] // ¿el tipo de valor no es ‘String?’
myDictionary [“foo”] = “bar”

let myString = myDictionary [“foo”]
print (myString) // Imprime “Opcional (” barra “) \ n”

Cómo desenvolver un opcional, hay diferentes formas de hacerlo. Podría volverse problemático como se menciona aquí. ¿La fuerza de desenvolver es una variable mala? .

Para una buena visión general de cómo lidiar con las opciones, vea ¿Cómo se evalúa Swift IF LET?

Pero si estás hablando de por qué los opcionales podrían ser malos … bueno, no sé …

El problema común es el desenvolvimiento de los opcionales, y las personas que realizan el desenvolvimiento forzado son las que obtienen sus bloqueos de aplicaciones en el momento en que se vuelven nulos.

More Interesting

¿Cuáles son las aplicaciones iOS peor diseñadas?

¿Vale la pena traducir una aplicación en tagalo para el mercado filipino o el inglés es lo suficientemente bueno?

Xamarin, NativeScript de Telerik, Corona SDK y una miríada de otros marcos de desarrollo cruzado se publican todo el tiempo. ¿No es mejor ser nativo de inmediato en lugar de agregar una capa de abstracción entre el desarrollador y el idioma de destino?

¿Dónde puedo obtener comentarios sobre el diseño de mi aplicación Iphone?

¿Por qué hay una mayor demanda de aplicaciones iOS?

Si compré una Macbook y comencé a autoaprendizaje Objective-C (a través de recursos web gratuitos y / o libros) y me familiaricé con el entorno XCode, ¿cuánto tiempo pasaría antes de que pudiera producir una aplicación básica para iPhone / iPad?

¿Por qué no puedo instalar iOS 8.3?

¿Es posible convertir un teléfono en un iBeacon?

Para probar un concepto como un nuevo diseño para buscar un hotel usando la API de Expedia, ¿cuál es el costo por usuario para adquirir el servicio en la web frente al móvil?

Desde la perspectiva de un desarrollador de juegos, ¿qué puede hacer para que un juego móvil sea adictivo?

¿Hay alguna empresa que tenga experiencia en el desarrollo de aplicaciones móviles Recipe?

Cómo agregar un bucle de fondo MP3 en una página creada por Interface Builder

¿Debo cambiar al desarrollo de C ++ como desarrollador iOS con más de 4 años de experiencia?

Tengo un hackathon de desarrollo de iOS en un mes. ¿Cuál es la mejor estrategia para comenzar a aprender ahora?

¿Hay algún inconveniente en usar Node.js para crear API RESTful para aplicaciones de iPhone?