swift optional

swift - Por qué la constante opcional no tiene automáticamente un valor predeterminado de nil



optional (2)

Esta pregunta ya tiene una respuesta aquí:

El siguiente código funciona bien

struct carConfi { var owner: String? let brand: String = "BMW" var currentMile: Double = 2000 } let tomCar = carConfi()

Sin embargo, si cambio el tipo del owner a constante, habrá un error en el inicializador

struct carConfi { let owner: String? // Change to constant let brand: String = "BMW" var currentMile: Double = 2000 } let tomCar = carConfi() //error: missing argument for parameter ''owner'' in call

Hice una búsqueda un poco, resulta que es porque las variables opcionales tienen automáticamente un valor predeterminado de cero

Supongo: porque una vez que se establece la constante, entonces no se puede cambiar, si la constante opcional recibe automáticamente un nil , se mantendrá como un nil inmutable que es muy tonto y puede ser contra los usuarios.

Pregunta: Mi universidad no está completamente convencida por la suposición, me dijo que debe haber más razones para eso. Agradecería mucho que alguien me lo explicara

Gracias


Las constantes se establecen una vez y solo una vez. Si quisieras que fuera nulo o 0, entonces lo establecerías. Siempre define una constante en la iniciación.


No establecer un campo de solo lectura (constante) con:

  • expresión de inicialización
  • inicializador

es casi seguro que indica un error en su programa.

Como no tiene otra oportunidad de establecer el valor de su campo let , el valor del campo seguirá siendo nil (o algún otro valor predeterminado). Es poco probable que un programador encuentre deseable este comportamiento y lo solicite a propósito.

Es por eso que Swift marca esta situación como un error. Por otro lado, si realmente desea que su constante de String permanezca nil , puede agregar una expresión para establecerla en nil y silenciar el error:

let owner: String? = nil // Pretty useless, but allowed