extension - Adornos variables Swift con "?"(Signo de interrogación) y "!"(Signo de exclamación)
swift syntax (1)
Entiendo que en Swift todas las variables se deben establecer con un valor, y que al usar opcionales podemos establecer que una variable se establezca en nil
inicialmente.
Lo que no entiendo es qué configuración una variable con a !
está haciendo, porque tenía la impresión de que esto "desenrolla" un valor de un opcional. Pensé que al hacerlo, está garantizando que hay un valor para desenvolver en esa variable, que es la razón por la que en IBActions y tal lo ven como se usa.
En pocas palabras, ¿a qué se inicializa la variable cuando haces algo como esto?
var aShape : CAShapeLayer!
¿Y por qué / cuándo haría esto?
En una declaración de tipo, el !
es similar a la ?
. Ambos son opcionales, pero el !
es un opcional " implícitamente desenvuelto " , lo que significa que no tiene que desenvolverlo para acceder al valor (pero aún puede ser nulo).
Este es básicamente el comportamiento que ya teníamos en objetivo-c. Un valor puede ser nulo, y debe verificarlo, pero también puede acceder al valor directamente como si no fuera una opción (con la importante diferencia de que si no busca cero obtendrá una Error de tiempo de ejecución)
// Cannot be nil
var x: Int = 1
// The type here is not "Int", it''s "Optional Int"
var y: Int? = 2
// The type here is "Implicitly Unwrapped Optional Int"
var z: Int! = 3
Uso:
// you can add x and z
x + z == 4
// ...but not x and y, because y needs to be unwrapped
x + y // error
// to add x and y you need to do:
x + y!
// but you *should* do this:
if let y_val = y {
x + y_val
}