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