Variables y Tipos
## Objetivos de Aprendizaje
- Comprender variables (var) y constantes (let)
- Dominar los tipos de datos de Swift
- Aprender inferencia de tipos
- Trabajar con anotaciones de tipo
## Variables y Constantes
### Variables (var)
Las variables pueden ser cambiadas despues de la inicializacion:
```swift
var edad = 25
edad = 26 // OK
var nombre = "Alicia"
nombre = "Roberto" // OK
```
### Constantes (let)
Las constantes no pueden ser cambiadas despues de la inicializacion:
```swift
let anioNacimiento = 1990
anioNacimiento = 1991 // Error!
let pi = 3.14159
pi = 3.14 // Error!
```
### Cuando Usar Cada Una
- Usa `let` por defecto
- Usa `var` cuando el valor debe cambiar
- Las constantes permiten optimizaciones del compilador
## Tipos de Datos
### Tipos Enteros
| Tipo | Tamano | Rango |
|------|--------|-------|
| Int8 | 8-bit | -128 a 127 |
| Int16 | 16-bit | -32,768 a 32,767 |
| Int32 | 32-bit | -2B a 2B |
| Int64 | 64-bit | -9Q a 9Q |
| Int | Plataforma | Depende de la plataforma |
| UInt | Sin signo | Tamano de la plataforma |
```swift
let positivo: UInt = 100
let negativo: Int = -50
let enteroPorDefecto: Int = 42
```
### Tipos de Punto Flotante
| Tipo | Tamano | Precision |
|------|--------|-----------|
| Float | 32-bit | ~6 digitos |
| Double | 64-bit | ~15 digitos |
```swift
let piFloat: Float = 3.14
let piDouble: Double = 3.14159265359
// Double es el predeterminado para punto flotante
let doublePorDefecto = 3.14159 // Double
```
### Booleano
```swift
let esSwift: Bool = true
let esFacil: Bool = false
// Usado en condiciones
if esSwift {
print("Swift es genial!")
}
```
### Cadena
```swift
let saludo: String = "Hola"
let nombre = "Mundo"
let combinado = saludo + ", " + nombre + "!"
```
### Caracter
```swift
let letra: Character = "A"
let emoji: Character = ""
```
## Inferencia de Tipos
Swift infiere los tipos cuando no se declaran explicitamente:
```swift
let enteroInferido = 42 // Int
let dobleInferido = 3.14 // Double
let cadenaInferida = "Hola" // String
let booleanoInferido = true // Bool
```
## Anotaciones de Tipo
Declarar tipos explicitamente:
```swift
var enteroExplicito: Int = 100
var dobleExplicito: Double = 1.5
var cadenaExplicita: String = "Texto"
var booleanoExplicito: Bool = false
```
### Multiples Variables
```swift
var rojo, verde, azul: Double
rojo = 0.1
verde = 0.5
azul = 0.9
```
## Seguridad de Tipos
Swift previene incompatibilidades de tipos:
```swift
let conteo: Int = 10
// conteo = "diez" // Error: no se puede asignar String a Int
```
### Conversion de Tipos
```swift
let valorEntero: Int = 42
let valorDouble: Double = Double(valorEntero) // 42.0
let numeroDouble: Double = 3.14
let numeroEntero: Int = Int(numeroDouble) // 3 (truncado)
```
## Literales Numericos
### Literales Enteros
```swift
let decimal = 42 // Decimal
let hex = 0x2A // Hexadecimal (42)
let octal = 0o52 // Octal (42)
let binario = 0b101010 // Binario (42)
```
### Literales de Punto Flotante
```swift
let flotanteDecimal = 3.14
let flotanteExponente = 0.314e1 // 3.14
let flotanteHex = 0x1.3p2 // Flotante hex (4.75)
```
### Guiones Bajos para Legibilidad
```swift
let unMillon = 1_000_000
let bytes = 0xFF_E0_00_00
```
## Cadenas y Caracteres
### Inicializacion de Cadenas
```swift
let cadenaVacia = ""
let otraVacia = String()
let hola = "Hola"
let mundo = "Mundo"
let combinado = "\(hola), \(mundo)!"
```
### Cadenas Multilinea
```swift
let poema = """
Las rosas son rojas,
Las violetas son azules,
Swift es increible,
Y tu tambien!
"""
```
### Caracteres Especiales
```swift
let conTabulacion = "Nombre\tEdad"
let nuevaLinea = "Linea1\nLinea2"
let comilla = "Ella dijo \"Hola!\""
let barraInvertida = "Ruta: C:\\Usuarios"
```
## Tuplas
Agrupan multiples valores:
```swift
let errorHTTP = (404, "No Encontrado")
print(errorHTTP.0) // 404
print(errorHTTP.1) // "No Encontrado"
// Elementos con nombre
let persona = (nombre: "Alicia", edad: 30)
print(persona.nombre) // "Alicia"
print(persona.edad) // 30
```
### Descomposicion de Tuplas
```swift
let (codigoEstado, mensaje) = errorHTTP
print(codigoEstado) // 404
// Ignorar elementos
let (soloCodigo, _) = errorHTTP
```
## Alias de Tipo
Crear nombres alternativos:
```swift
typealias MuestraAudio = UInt16
typealias Punto = (x: Int, y: Int)
let amplitudMaxima: MuestraAudio = UInt16.max
let origen: Punto = (x: 0, y: 0)
```
## Any y AnyObject
### Any
Cualquier tipo incluyendo funciones:
```swift
var cualquierValor: Any = 42
cualquierValor = "Cadena"
cualquierValor = [1, 2, 3]
```
### AnyObject
Cualquier instancia de clase:
```swift
var cualquierObjeto: AnyObject = NSObject()
cualquierObjeto = UIView() // En plataformas Apple
```
## Resumen
- `var` para variables, `let` para constantes
- Swift tiene Int, Double, Float, Bool, String, Character
- La inferencia de tipos deduce los tipos automaticamente
- Usar anotaciones de tipo cuando sea necesario
- Las tuplas agrupan multiples valores
- `Any` y `AnyObject` para tipos mixtos
- Las constantes (let) son preferidas por seguridad
Comments
Comments powered by Giscus
To enable comments, add your Giscus embed code here.
Learn more about Giscus →