unwrap protocol extension swift initialization constants optional

extension - swift protocol optional



Swift-uso de opcional con let (3)

Si está poniendo un literal y lo hace opcional, la parte opcional es inútil porque sabe que ese number va a ser 1

let number: Int? = 1

Sin embargo, si desea hacer una copia constante de otro objeto, donde no sabe si la fuente será nula o no, lo es.

var array = ["hello"] let string: String? = array[1] // string is nil, so you can do some checking with it

El ejemplo anterior no ilustra completamente mi punto, pero asume que la array es una matriz mutable que podrías estar eliminando y agregando valores esporádicamente (donde puedes obtener un valor nulo si estás buscando el índice "1")

Estoy aprendiendo rápido. En las primeras impresiones no puedo ver ningún punto de declarar una constante (sin un valor almacenado inicial) como una opción dentro de una clase ... por ejemplo

let userName: String?

porque un inicializador predeterminado lo asignaría a cero y no podría ser modificado posteriormente (porque es una constante).

Tal como lo entiendo, un inicializador personalizado aún puede asignarle un valor no nulo, pero en ese caso no lo declararía simplemente como let userName: String (es decir, no opcional)

Hubiera esperado que si se trataba de un patrón redundante, Apple lo hubiera mencionado, pero no veo que lo hayan hecho ... ¿en qué situaciones se usaría o sería útil una declaración constante opcional?


Solo la variable opcional se establecerá automáticamente en cero si no se proporciona ningún valor inicial

Constante opcional de tipo T? NO se establecerá automáticamente en cero
necesita inicializarse manualmente con un valor de tipo T o nulo

  • Si no se inicializa manualmente antes de su uso, se lanzará un error "constante utilizada antes de inicializarse"

  • De forma similar, si una clase tiene una propiedad de constante opcional sin inicializarla de forma manual y tampoco tiene constructo, se lanzará un error "la clase no tiene iniciadores".


Una constante que es una opción necesita que se le asigne un valor durante el proceso de inicio. Ese valor puede ser nulo, o algún otro valor. Una vez asignado, está atrapado en ese valor. A nil es como un indicador "esta propiedad intencionalmente dejada en blanco", escrita con tinta permanente.

Supongamos que tiene una clase que se llena con los datos de respuesta de una solicitud de red. Algunos de los campos que recibe pueden ser nulos o pueden contener datos.

Escribe un código que analiza la respuesta del servidor y crea un objeto de respuesta. Cada propiedad del objeto de respuesta es fija. O contiene datos si obtuviste información para esa propiedad, o nada.

En ese caso, tiene mucho sentido usar una constante opcional.

Usted escribiría un método init para su objeto de respuesta que tomaría la respuesta de la red (en JSON, por ejemplo) y llenaría las propiedades del objeto de respuesta. Si falta una etiqueta determinada en los datos JSON, establecería esa propiedad en cero. Utiliza una constante porque el valor se fija una vez que se inicializa el objeto de respuesta. Si es nulo, será nulo para siempre. Si contiene un valor, siempre contendrá ese valor y no se puede cambiar.