Intern
¿Qué son los tipos de datos y cuáles existen?
sobes.tech AI
Respuesta de la IA
Los tipos de datos definen el conjunto de valores posibles y las operaciones que se pueden realizar sobre ellos. En Swift, se dividen en Tipos de Valor y Tipos de Referencia.
Tipos de Valor:
- Los valores se copian al asignar o pasar a una función.
- Cada variable o constante almacena su propia copia independiente de los datos.
- Los cambios en una copia no afectan a las otras.
Ejemplos de Tipos de Valor:
- Estructuras (
struct) - Enumeraciones (
enum) - Tuplas (
tuple) - Tipos básicos:
Int,Double,Bool,String, arreglos (Array), diccionarios (Dictionary), conjuntos (Set).
// Ejemplo de Tipo de Valor: struct
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 obtiene una copia de p1
p2.x = 10 // Cambiar p2 no afecta a p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
Tipos de Referencia:
- Los valores no se copian. Al asignar o pasar a una función,
- se pasa una referencia al mismo ejemplar de datos en memoria.
- Varias variables o constantes pueden referirse al mismo ejemplar.
- Los cambios a través de una referencia son visibles en todas las demás.
Ejemplos de Tipos de Referencia:
- Clases (
class) - Funciones (
func) - Cierres (
closure)
// Ejemplo de Tipo de Referencia: class
class Circle {
var radius: Double
init(radius: Double) {
self.radius = radius
}
}
var c1 = Circle(radius: 5.0)
var c2 = c1 // c2 referencia al mismo ejemplar que c1
c2.radius = 10.0 // Cambiar c2 afecta a c1
print("c1 radius: \(c1.radius)") // c1 radius: 10.0
print("c2 radius: \(c2.radius)") // c2 radius: 10.0
Tabla con los tipos principales:
| Categoría | Tipo(s) | Tipo de Valor/Referencia | Descripción |
|---|---|---|---|
| Enteros | Int, UInt, Int8, UInt8, etc. |
Valor | Números enteros de diferentes tamaños, con o sin signo |
| Punto flotante | Float, Double |
Valor | Números con parte fraccionaria |
| Booleanos | Bool |
Valor | Valores lógicos (true o false) |
| Cadenas | String |
Valor | Secuencia de caracteres |
| Colecciones | Array, Dictionary, Set |
Valor | Colecciones ordenadas/no ordenadas de elementos del mismo tipo |
| Estructuras | struct |
Valor | Tipos compuestos definidos por el usuario que almacenan valores relacionados |
| Enumeraciones | enum |
Valor | Definen un tipo común para un grupo de valores relacionados |
| Tuplas | (value1, value2, ...) |
Valor | Agrupan varios valores en un solo tipo compuesto |
| Clases | class |
Referencia | Tipos compuestos definidos por el usuario que soportan herencia y comportamiento por referencia |
| Funciones | () -> Void, (Int) -> String, etc. |
Referencia | Bloques de código ejecutable |
| Cierres | { (parameters) -> return type in code } |
Referencia | Bloques de código autónomos que pueden ser pasados y utilizados |
| Opcionales | Type? (azúcar sintáctico para Optional<Type>) |
Valor | Representa un valor del tipo Type o su ausencia (nil) |
La elección entre Tipos de Valor y Referencia depende de la tarea: Los Tipos de Valor son preferibles para datos pequeños y para garantizar la seguridad en hilos, mientras que los Tipos de Referencia son adecuados para objetos complejos que requieren estado compartido y herencia.