¿Por qué puedo declarar una variable sin escribir una marca opcional?

En primer lugar, creo que mi pregunta es diferente con esas preguntas sobre "lo que es opcional en swift". Porque me pregunto por qué puedo hacer esto, no qué es esto.

Soy nuevo en lo veloz. Cuando aprendo este lenguaje fabuloso esta noche, tuve un problema que nunca vi esta marca … " ? " En un lenguaje de progtwigción. Y lo busqué por un time. Sé cuál es el enlace opcional ahora.

Pero ahora tengo una nueva pregunta. Cuando quiero declarar una variable que no es opcional. Puedo escribir esta syntax:

var friend: String 

Pero no puedo escribir:

 var friend: String = nil 

Para declarar una variable que no es nula solo puedo usar opcional:

 var friend: String? = nil 

Veamos la primera pieza de código. Cuando se declara la nueva variable amigo , su valor es nulo, ¿verdad? Porque no le asigné ningún valor. Pero de acuerdo con la definición de opcional, como la segunda y la tercera piezas de código, no podemos asignar cero a variables no opcionales.

Entonces mi pregunta es por qué puedo declarar una variable sin marca opcional pero no tiene valor inicial. Esta pregunta puede ser simple, pero realmente no sé por qué sucede.

¡Gracias por adelantado!

Swift le permite declarar una variable o constante no opcional sin inicializarlo en la statement, pero tendrá que asignarle un valor antes de usarlo. El valor de la variable o constante no es nil (los non-opcionales nunca pueden ser nulos), simplemente no tiene un valor definido. Básicamente, usted está diciendo que le dará un valor más tarde, posiblemente en function del resultado de un cálculo o una statement if.

Swift le dará un error de time de compilation si intenta usar una variable o constante no opcional sin primero asignarle un valor.

El primer valor que establece es una variable no inicializada con el tipo de cadena.

Un patrón muy común en la progtwigción es tener una operación que pueda o no devolver un valor. En algunos idiomas, como javascript, cuando se encuentra con un valor nulo, nuestro progtwig continúa funcionando bien, siempre que nuestro progtwig no dependa de ese valor para continuar. En otros idiomas, como Java, por ejemplo, un valor nulo puede provocar una NullPointerException y bloquear nuestro progtwig.

La solución de Swift a este problema es opcionales. De forma pnetworkingeterminada, si definimos una variable sin un valor, el comstackdor se quejará. Por lo tanto, para declarar un valor que puede o no tener un valor en time de ejecución, necesitamos agregar un? que se conoce como "envolver nuestros valores en una opción". Esto se debe a que literalmente estamos envolviendo nuestro valor en el tipo opcional de Swifts, lo que le da valor. Para get una mejor image de lo que está pasando, podemos ver cómo Swifts Optional enum.

 enum Optional<T> { case None // has no value case Some(T) // has some value }