El lenguaje de programación Swift tiene una nueva característica llamada opcionales que no estaban disponibles anteriormente en Objective-C. Son similares a tipos opcionales en Java y tipos que aceptan valores NULL en el lenguaje de programación C #.
Índice de contenido
¿Por qué utilizar opcionales?
Quizás esté pensando “Puedo ignorar las opciones opcionales, es una función que nunca usaré”, pero le recomiendo que lea más. Encontraras que tu debe use opcionales en Swift si alguna vez necesita que un valor sea nulo.
Los valores opcionales en Swift le permiten ser más preciso en su código al permitirle especificar cuándo está bien que un valor en particular esté vacío (¡y cuándo no lo está!) Esto le ayuda a evitar errores de programación comunes que ocurren en su aplicación cuando encuentra un valor nulo inesperado.
Los opcionales de Swift también ayudan a que el código de su aplicación refleje más de cerca la capacidad que ya tiene en Core Data para indicar que un atributo de entidad en particular es opcional. Como se muestra en Figura 1, puede especificar el tipo de un atributo (String, en este caso) así como indicar si el valor es opcional.
![]() |
| Figura 1: puede especificar que un atributo de entidad de datos básicos es opcional. |
Ahora Swift le permite hacer lo mismo con sus propiedades y variables. Aquí hay una declaración opcional equivalente en Swift:
var middleName: String?
Esta declaración crea una variable llamada segundo nombre de tipo Cuerda. El signo de interrogación (?) después de la Cuerda tipo de variable indica que el segundo nombre La variable puede contener un valor que puede ser un Cuerda o nulo. Cualquiera que vea este código sabe inmediatamente que segundo nombre puede ser nulo. ¡Es autodocumentado!
Si no especifica un valor inicial para una constante o variable opcional (como se muestra arriba), el valor se establece automáticamente en nulo para ti. Si lo prefiere, puede establecer explícitamente el valor inicial en cero:
var middleName: String? = nil
Ahora echemos un vistazo más de cerca a cómo nulo se utiliza en Swift.
nada en Swift
Puede que no sea obvio a primera vista, pero solo los opcionales pueden ser nulo. Como se indica en Apple El lenguaje de programación Swift libro (disponible de forma gratuita en la iBooks Store):
nulo no se puede utilizar con constantes y variables no opcionales. Si una constante o variable en su código necesita poder hacer frente a la ausencia de un valor bajo ciertas condiciones, siempre debe declararlo como un valor opcional del tipo apropiado.
Esto significa que no puede hacer algo como esto, porque el primer nombre La variable no está marcada con un signo de interrogación para indicar que es opcional:
var firstName: String = nil
Este código produce el siguiente error de tiempo de compilación:
El tipo ‘String’ no se ajusta al protocolo ‘NilLiteralConvertible’.
También es importante tener en cuenta que nulo en Swift es diferente a nulo en Objective-C. En Objective-C, nulo es un puntero a un objeto inexistente. En Swift, nulo simplemente indica la ausencia de un valor, no es un puntero. Esto significa que puede especificar opcionales de ninguna tipo, no solo tipos de objeto.
Acceder a valores opcionales
A diferencia de otros lenguajes de programación, en Swift, no puede acceder a un valor opcional directamente. Debes desenvolver el opcional primero para acceder a su valor subyacente. Tomemos, por ejemplo, el siguiente código:
var firstName: String = “Ryan”
var middleName: String? = “Michael”
var firstAndMiddleNames: String
firstAndMiddleNames = firstName + “” + middleName
Las primeras tres líneas de código declaran un primer nombre Variable de cadena, a segundo nombre Opcional Variable de cadena y una primer y segundo nombre Variable de cadena. La siguiente línea de código concatena (une) el primer nombre y segundo nombre valores variables junto con un espacio entre ellos. Es posible que se sorprenda al descubrir que esta línea de código genera el siguiente error de tiempo de compilación:
Valor del tipo de opción ‘¿Cadena?’ no desenvuelto; ¿Querías usar ‘!’ o ‘?’?
Este es uno de los mecanismos de protección de Swift. Te obliga a reconocer que un valor posiblemente sea nulo. Entonces, ¿cómo se desenvuelve un opcional? Hay dos formas principales, como se describe en las siguientes secciones.
Uso de desenvolvimiento forzado para opcionales
Como sugiere el error del compilador en la sección anterior, una forma de desenvolver un valor opcional es usar el signo de exclamación (!) Después del opcional para desenvolverlo explícitamente. Por ejemplo:
firstAndMiddleNames = firstName + " " + middleName!
Esto fuerza manualmente el valor de la segundo nombre opcional para ser desenvuelto. Sin embargo, si segundo nombre contiene un cero en tiempo de ejecución, esto producirá un EXC_BAD_INSTRUCTION Error de tiempo de ejecución. Por lo tanto, es obvio que no querrá utilizar el desenvuelto forzado a menos que absolutamente Por supuesto que el valor no es nulo.
Uso de enlace opcional para desenvolver opcionales
Puede utilizar una técnica conocida como encuadernación opcional para probar si un opcional contiene un valor, y si es así, almacenar ese valor en una variable temporal o constante. Para mostrar cómo funciona esto con nuestro ejemplo anterior, consulte este código:
var firstName: String = "Ryan"
var middleName: String? = "Michael"
var firstAndMiddleNames: String
if let middle = middleName
{
firstAndMiddleNames = firstName + " " + middle
}
else
{
firstAndMiddleNames = firstName
}
Cuando el Si La condición se comprueba en tiempo de ejecución, si el segundo nombre variable contiene una Cuerda valor, la condición se evalúa como cierto, el valor contenido en el segundo nombre La variable se desenvuelve, se almacena en el medio constante y el código entre llaves de la Si se ejecuta la sentencia.
Si el segundo nombre variable contiene nulo, la condición se evalúa como falso, el valor opcional es no desenvuelto, y el código entre las llaves del más se ejecuta la sentencia.
Opcionales implícitamente no envueltos
Swift también tiene algo llamado opcionales sin envolver implícitamente. Estos son opcionales que no necesitan ser desenvueltos usando el desenvolvimiento forzado (!) O el enlace opcional porque se desenvuelven implícitamente (automáticamente). Se declaran con un signo de exclamación (!) En lugar de un signo de interrogación (?).
A menudo ve opciones opcionales implícitamente desempaquetadas cuando trabaja con salidas de Interface Builder (IBOutlet propiedades). Por ejemplo:
@IBOutlet weak var lblDescription: UILabel!
En este código, el lbl Descripción La propiedad outlet tiene un signo de exclamación después, lo que indica que está implícitamente desenvuelta. Esto le permite acceder a la propiedad sin desenvolverla.
En este ejemplo, la propiedad de salida no es garantizado contener una referencia a una etiqueta, pero es absolutamente debería. Si no contiene una referencia a una etiqueta, significa que la conexión entre la salida y la etiqueta se ha roto. En ese caso, está bien tener un error de tiempo de ejecución porque desea saber que la conexión está rota para poder solucionarlo.
Obviamente, en los casos en los que no esté 100 por ciento seguro de que una constante o variable contiene un valor, debe usar un opcional regular en su lugar.
Conclusión
Los opcionales son una gran característica nueva de Swift que le permite manejar con seguridad nulo valores en sus aplicaciones de iOS. Recomiendo revisar esta publicación varias veces para asegurarse de que comprende los conceptos básicos y luego volver a Apple El lenguaje de programación Swift reserve para obtener más información sobre cómo se utilizan los opcionales en Swift.













