Tipos de datos de Swift
Cuando utilizamos cualquier lenguaje de programación, necesitamos usar varios tipos de datos para almacenar información diferente.
El tipo de datos de una variable determina cómo se almacenan en la memoria de la computadora los bits que representan esos valores. También se puede especificar su tipo de datos al declarar la variable.
Todas las variables tienen un tipo de datos, que determina qué tipo de datos pueden almacenar.
Tipos de datos integrados
Swift ofrece una gran variedad de tipos de datos. A continuación se enumeran algunos tipos de datos de uso común:
Int
En general, no es necesario especificar explícitamente la longitud de los enteros. Swift proporciona un tipo entero especialInt, cuya longitud es la misma que el tamaño de palabra nativo de la plataforma actual:
- En plataformas de 32 bits,
IntyInt32tienen la misma longitud. - En plataformas de 64 bits,
IntyInt64tienen la misma longitud.
A menos que necesites enteros de una longitud específica, en general usarIntes suficiente. Esto puede mejorar la consistencia y la reutilización del código. Incluso en plataformas de 32 bits,Intel rango de enteros que puede almacenar también puede llegar a-2,147,483,648~2,147,483,647, y la mayoría de las veces esto ya es suficientemente grande.
UInt
Swift también proporciona un tipo sin signo especialUInt, cuya longitud es la misma que el tamaño de palabra nativo de la plataforma actual:
- En plataformas de 32 bits,
UIntyUInt32tienen la misma longitud. - En plataformas de 64 bits,
UIntyUInt64tienen la misma longitud.
Nota:Intenta no usar
UInt, a menos que realmente necesites almacenar un entero sin signo del mismo tamaño que la palabra nativa de la plataforma actual. Excepto en este caso, es mejor usarInt, incluso si se sabe que el valor que vas a almacenar no es negativo. Usar de manera uniformeIntpuede mejorar la reutilización del código, evitar conversiones entre diferentes tipos de números y coincidir con la inferencia de tipos de los números.
Con respecto a los tipos enteros, ten en cuenta los siguientes puntos:
En sistemas de 32 bits, Int e Int32 tienen la misma longitud.
En sistemas de 64 bits, Int e Int64 tienen la misma longitud.
En sistemas de 32 bits, UInt y UInt32 tienen la misma longitud.
En sistemas de 64 bits, UInt y UInt64 tienen la misma longitud.
Int8, Int16, Int32 e Int64 representan enteros con signo de 8 bits, 16 bits, 32 bits y 64 bits, respectivamente.
UInt8, UInt16, UInt32 y UInt64 representan enteros sin signo de 8 bits, 16 bits, 32 bits y 64 bits, respectivamente.
Números de punto flotante: Float, Double
Los números de punto flotante son números con parte fraccionaria, por ejemplo3.14159,0.1y-273.15。
El tipo de punto flotante representa un rango más amplio que el tipo entero, y puede almacenarIntnúmeros más grandes o más pequeños que el tipo. Swift proporciona dos tipos de números de punto flotante con signo:
- DoubleRepresenta números de punto flotante de 64 bits. Usa este tipo cuando necesites almacenar números de punto flotante muy grandes o de alta precisión.
- FloatRepresenta números de punto flotante de 32 bits. Si los requisitos de precisión no son altos, puedes usar este tipo.
Nota:
Doubletiene una precisión muy alta, de al menos 15 dígitos, mientras queFloattiene solo 6 dígitos como mínimo. La elección del tipo depende del rango de valores que tu código necesite manejar.
Valores booleanos: Bool
Swift tiene un tipo booleano básico llamado Bool. Los valores booleanos se refieren a valores lógicos, porque solo pueden ser verdaderos o falsos. Swift tiene dos constantes booleanas: true y false.
Cadenas: String
Una cadena es una colección de caracteres en secuencia, por ejemplo:
"Hello, World!"
Caracteres: Character
Un carácter se refiere a una sola letra, por ejemplo:
"C"
Tipos opcionales: Optional
Usa tipos opcionales para manejar situaciones en las que un valor puede faltar. Un tipo opcional representa que hay un valor o que no lo hay.Rangos numéricos
La siguiente tabla muestra el espacio de almacenamiento en memoria de los diferentes tipos de variables, así como los valores máximo y mínimo de los tipos de variables:
| Tipo | Tamaño (bytes) | Rango de valores |
|---|---|---|
| Int8 | 1 byte | -128 a 127 |
| UInt8 | 1 byte | 0 a 255 |
| Int32 | 4 bytes | -2147483648 a 2147483647 |
| UInt32 | 4 bytes | 0 a 4294967295 |
| Int64 | 8 bytes | -9223372036854775808 a 9223372036854775807 |
| UInt64 | 8 bytes | 0 a 18446744073709551615 |
| Float | 4 bytes | 1.2E-38 a 3.4E+38 (~6 dígitos) |
| Double | 8 bytes | 2.3E-308 a 1.7E+308 (~15 dígitos) |
Alias de tipo
Un alias de tipo define otro nombre para el tipo actual. El alias de tipo se define mediante la palabra clave typealias. El formato de sintaxis es el siguiente:
typealias newname = type
Por ejemplo, lo siguiente define Feet como alias de tipo de Int:
typealias Feet = Int
Ahora podemos definir variables mediante el alias:
import Cocoa typealias Feet = Int var distance: Feet = 100 print(distance)
Usamos playground para ejecutar el programa anterior; el resultado es:
100
Seguridad de tipos
Swift es un lenguaje con seguridad de tipos (type safe).
Debido a que Swift tiene seguridad de tipos, realiza comprobaciones de tipos (type checks) al compilar tu código y marca los tipos no coincidentes como errores. Esto te permite detectar y corregir errores en una etapa temprana del desarrollo.
import Cocoa var varA = 42 varA = "This is hello" print(varA)
El programa anterior generará un error en Xcode:
error: cannot assign value of type 'String' to type 'Int' varA = "This is hello"
Significa que no se puede asignar la cadena 'String' a la variable 'Int'.
Inferencia de tipos
Cuando vas a trabajar con valores de diferentes tipos, la comprobación de tipos puede ayudarte a evitar errores. Sin embargo, esto no significa que necesites especificar explícitamente el tipo cada vez que declares constantes y variables.
Si no especificas explícitamente el tipo, Swift usará la inferencia de tipos (type inference) para elegir el tipo adecuado.
Por ejemplo, si asignas 42 a una nueva constante y no indicas el tipo, Swift puede inferir que el tipo de la constante es Int, porque el valor inicial que le asignas parece un entero:
let meaningOfLife = 42 // meaningOfLife 会被推测为 Int 类型
Del mismo modo, si no indicas el tipo de un literal de punto flotante, Swift inferirá que quieres un Double:
let pi = 3.14159 // pi 会被推测为 Double 类型
Al inferir el tipo de un número de punto flotante, Swift siempre elegirá Double en lugar de Float.
Si en una expresión aparecen a la vez enteros y números de punto flotante, se inferirá como tipo Double:
let anotherPi = 3 + 0.14159 // anotherPi 会被推测为 Double 类型
El valor original 3 no tiene un tipo declarado explícitamente, pero en la expresión aparece un literal de punto flotante, por lo que se inferirá que la expresión es de tipo Double.
Ejemplo
import Cocoa // varA 会被推测为 Int 类型 var varA = 42 print(varA) // varB 会被推测为 Double 类型 var varB = 3.14159 print(varB) // varC 也会被推测为 Double 类型 var varC = 3 + 0.14159 print(varC)
Al ejecutar el código anterior, el resultado es:
42 3.14159 3.14159Otras extensiones