¿Cuándo debo usar una cadena opcional en mi model?

En mi código model actualmente en algunos lugares, lo estoy haciendo

var optionalString : String? 

y en algunos lugares

 var otherString : String = "" 

Cuando es opcional y lo desenvuelvo, tengo miedo de que no sea nulo y solo por estar en el lado seguro que hago

 let newString = optionalString ?? "" 

Con opciones, necesito desenvolver y realizar cheques sin nulos. Hace que el código sea un poco less legible.

¿Debería una cadena ser opcional en el model? Cualquier escenario donde debe ser uno?

IMO, opcionales de cadena y cadenas vacías son intercambiables a veces.

Digamos que tenemos una class de persona, tiene una propiedad de name . En este caso, una persona debe tener un nombre, por lo que las cadenas opcionales y vacías son intercambiables (puede usar cualquiera). Puede usar nil o "" para indicar que una persona no tiene nombre. Quieren decir lo mismo También puedes declarar una constante:

 let NoName = "" 

Y puedes simplemente comprobarlo con esta constante muy abstracta, en lugar de nil , que es un poco less abstracta.

Por otro lado, a veces debe usar una opción. Y es cuando nil y "" tienen significados diferentes en el context. Usemos nuestra class de persona para ilustrar esto también. La class de persona tiene una propiedad llamada dogName . Si él / ella no tiene un perro, es nil . Si él / ella tiene un perro pero no le ha dado un nombre, es una cadena vacía. Y si él / ella tiene un perro y le ha dado un nombre, sería "fido" u otros nombres. En este caso, nil significa que él / ella no tiene perro y "" significa que su perro no tiene nombre. ¡Tienen diferentes significados!

Conclusión: cuando la cadena nula y vacía tienen el mismo significado, opta opcionalmente. Cuando la cadena nula y vacía tienen significados diferentes, use opcional.

Los opcionales se usan cuando la ausencia de un valor (la cadena) tiene semántica diferente de un valor vacío.

Ejemplo simple:

Una contraseña podría ser

  • establecer en alguna cadena
  • vacío
  • aún no establecido en absoluto.

Aquí, el caso "no establecido" debe manejarse de manera diferente que el caso "vacío".

Solo debe usar optionals cuando la lógica del model difiera para una cadena vacía o faltante. Lo mismo es cierto para los types de colección (Array, Dictionary).