Swift: Desarrollo Apple Moderno

Aprende Swift para crear apps iOS, macOS, watchOS y tvOS increíbles


Swift: Desarrollo Apple Moderno
1 Cargando...

Swift: Desarrollo Apple Moderno

Swift es un lenguaje de programación poderoso e intuitivo creado por Apple en 2014. Diseñado para ser seguro, rápido y expresivo, Swift es el lenguaje principal para desarrollo iOS, macOS, watchOS, tvOS e incluso aplicaciones del lado del servidor.

¿Por qué Swift? Swift combina rendimiento cercano a C con sintaxis moderna y segura. Con SwiftUI, crear interfaces nativas nunca ha sido tan simple y declarativo.

Características Distintivas

  1. Type Safety - Sistema de tipos riguroso que previene errores
  2. Optionals - Manejo elegante de valores nulos
  3. Protocol-Oriented - Composición sobre herencia
  4. Value Types - Structs y enums como ciudadanos de primera clase
  5. SwiftUI - Framework declarativo para interfaces
  6. Concurrency - async/await y actors nativos

Fundamentos

Tipos y Variables

// Constantes y variables
let nombre: String = "María"  // Constante (inmutable)
var edad: Int = 25            // Variable (mutable)
let altura = 1.68             // Inferencia de tipo (Double)
let activo = true             // Bool

// Optionals - valores que pueden ser nil
var email: String? = nil
email = "[email protected]"

// Optional binding
if let emailSeguro = email {
    print("Email: \(emailSeguro)")
}

// Guard para salida temprana
func procesarEmail(_ email: String?) {
    guard let email = email else {
        print("Email inválido")
        return
    }
    print("Procesando: \(email)")
}

// Nil coalescing
let displayEmail = email ?? "No proporcionado"

// Arrays y Diccionarios
var frutas: [String] = ["manzana", "banana", "naranja"]
frutas.append("uva")

var usuarios: [String: Int] = [
    "alice": 25,
    "bob": 30
]

Funciones y Closures

// Función con parámetros nombrados
func saludar(persona nombre: String, con mensaje: String = "Hola") -> String {
    return "\(mensaje), \(nombre)!"
}
let saludo = saludar(persona: "María", con: "Bienvenida")

// Múltiples retornos con tuplas
func calcularEstadisticas(_ numeros: [Int]) -> (min: Int, max: Int, suma: Int) {
    let min = numeros.min() ?? 0
    let max = numeros.max() ?? 0
    let suma = numeros.reduce(0, +)
    return (min, max, suma)
}

// Closures
let doblar = { (numero: Int) -> Int in
    return numero * 2
}

// Higher-order functions
let numeros = [1, 2, 3, 4, 5]
let doblados = numeros.map { $0 * 2 }
let pares = numeros.filter { $0 % 2 == 0 }
let suma = numeros.reduce(0, +)

Structs y Clases

// Struct (value type) - preferido en Swift
struct Usuario: Identifiable, Codable {
    let id: UUID
    var nombre: String
    var email: String
    var activo: Bool
    
    init(nombre: String, email: String) {
        self.id = UUID()
        self.nombre = nombre
        self.email = email
        self.activo = true
    }
    
    mutating func desactivar() {
        activo = false
    }
    
    func saludar() -> String {
        "¡Hola, \(nombre)!"
    }
}

// Clase (reference type)
class GestorUsuarios: ObservableObject {
    @Published var usuarios: [Usuario] = []
    
    func agregar(_ usuario: Usuario) {
        usuarios.append(usuario)
    }
    
    func eliminar(id: UUID) {
        usuarios.removeAll { $0.id == id }
    }
}

Concurrencia Moderna

// async/await
func buscarUsuario(id: UUID) async throws -> Usuario {
    let url = URL(string: "https://api.ejemplo.com/usuarios/\(id)")!
    let (data, _) = try await URLSession.shared.data(from: url)
    return try JSONDecoder().decode(Usuario.self, from: data)
}

// Múltiples tareas en paralelo
func buscarDatos() async throws -> (Usuario, [Producto]) {
    async let usuario = buscarUsuario(id: UUID())
    async let productos = buscarProductos()
    
    return try await (usuario, productos)
}

// Actors para thread safety
actor ContadorSeguro {
    private var valor = 0
    
    func incrementar() {
        valor += 1
    }
    
    func obtenerValor() -> Int {
        valor
    }
}

SwiftUI Básico

import SwiftUI

struct ContentView: View {
    @StateObject private var viewModel = UsuariosViewModel()
    @State private var mostrarFormulario = false
    
    var body: some View {
        NavigationStack {
            List(viewModel.usuarios) { usuario in
                NavigationLink(destination: DetalleUsuarioView(usuario: usuario)) {
                    HStack {
                        Image(systemName: "person.circle")
                            .foregroundColor(.blue)
                        VStack(alignment: .leading) {
                            Text(usuario.nombre)
                                .font(.headline)
                            Text(usuario.email)
                                .font(.caption)
                                .foregroundColor(.secondary)
                        }
                    }
                }
            }
            .navigationTitle("Usuarios")
            .toolbar {
                Button(action: { mostrarFormulario = true }) {
                    Image(systemName: "plus")
                }
            }
        }
    }
}

Herramientas Esenciales

HerramientaPropósito
XcodeIDE oficial de Apple
Swift Package ManagerGestor de dependencias
TestFlightBeta testing
InstrumentsProfiling y debugging

Lista de Verificación de Aprendizaje

  • Dominar optionals y unwrapping
  • Entender structs vs clases
  • Aprender protocolos y extensions
  • Estudiar async/await y actors
  • Practicar SwiftUI
  • Explorar Combine framework
  • Publicar una app en la App Store

Recursos Esenciales

Cita

“Swift es el lenguaje más poderoso e intuitivo que hemos creado.” - Craig Federighi, Apple


¡Swift es la puerta de entrada al rico ecosistema Apple. Comienza hoy y crea apps increíbles!