En el mundo actual del desarrollo de aplicaciones, la visualización de datos ha pasado de ser un lujo a una necesidad absoluta. Como iOS Developer, es muy probable que te enfrentes al reto de mostrar métricas, estadísticas de uso, resultados financieros o cualquier tipo de información cuantitativa de una forma que sea digerible y atractiva para el usuario final. Durante mucho tiempo, los desarrolladores tuvimos que depender de librerías de terceros complejas, pero con la evolución de la programación Swift, Apple nos ha entregado una herramienta nativa, potente y maravillosamente declarativa: Swift Charts.
En este artículo, vamos a sumergirnos profundamente en este framework. Nuestro objetivo principal será aprender a crear graficos de barras con Swift Charts en SwiftUI. Lo mejor de esta tecnología es que, al ser puramente nativa, el código que escribiremos será perfectamente compatible y escalable no solo para iOS, sino también para macOS y watchOS.
Prepara tu entorno, abre Xcode, y acompáñame en este tutorial paso a paso para dominar la creación de gráficos en SwiftUI.
¿Qué es Swift Charts y por qué revolucionó la programación Swift?
Introducido en iOS 16, macOS 13 y watchOS 9, Swift Charts es un framework diseñado para transformar datos en visualizaciones ricas y accesibles utilizando una sintaxis declarativa que resulta muy familiar si ya conoces SwiftUI.
Antes de Swift Charts, un iOS Developer tenía que recurrir a herramientas como Core Graphics (que requiere mucho código imperativo y matemáticas complejas) o integrar dependencias externas que a menudo inflaban el tamaño de la aplicación y traían problemas de mantenimiento. Swift Charts elimina estos dolores de cabeza. Su integración con el ecosistema de Swift es tan natural que puedes crear gráficos complejos en apenas unas pocas líneas de código.
Además, incluye soporte automático para Modo Oscuro, localización, accesibilidad (VoiceOver lee los gráficos de manera inteligente por defecto) y animaciones.
Paso 1: Configurando nuestro proyecto en Xcode
Para empezar, necesitamos un entorno de trabajo adecuado.
- Abre Xcode y selecciona Create a new Xcode project.
- Elige la plantilla App bajo la pestaña de iOS (o Multiplatform si deseas probarlo en macOS inmediatamente).
- Nombra tu proyecto, por ejemplo,
DataVisualizerApp. - Asegúrate de que la interfaz seleccionada sea SwiftUI y el lenguaje sea Swift.
Una vez que Xcode haya generado tu proyecto, dirígete a tu archivo ContentView.swift. Para poder utilizar las herramientas de gráficos, necesitamos importar el framework correspondiente en la parte superior de nuestro archivo.
import SwiftUI
import Charts // Imprescindible para acceder a Swift Charts
Paso 2: Definiendo el Modelo de Datos en Swift
La base de cualquier buen gráfico es una estructura de datos sólida. En la programación Swift, la mejor práctica es utilizar estructuras (struct) que conformen el protocolo Identifiable. Esto permite a SwiftUI diferenciar cada elemento de manera única cuando itera sobre ellos para dibujar las barras.
Imaginemos que estamos desarrollando una aplicación para una cafetería y queremos mostrar las ventas de diferentes tipos de café durante la semana.
struct VentaCafe: Identifiable {
let id = UUID()
let tipo: String
let cantidadVendida: Int
}
// Creamos un array con datos de prueba (Mock Data)
let datosVentas: [VentaCafe] = [
VentaCafe(tipo: "Espresso", cantidadVendida: 120),
VentaCafe(tipo: "Latte", cantidadVendida: 250),
VentaCafe(tipo: "Cappuccino", cantidadVendida: 180),
VentaCafe(tipo: "Americano", cantidadVendida: 300),
VentaCafe(tipo: "Mocha", cantidadVendida: 150)
]
Como iOS Developer, mantener tu código limpio y separado es vital. En un proyecto real, estos datos probablemente provendrían de una API o de una base de datos local usando SwiftData o CoreData.
Paso 3: Cómo crear graficos de barras con Swift Charts en SwiftUI (Lo básico)
Ahora viene la magia. Para crear graficos de barras con Swift Charts en SwiftUI, utilizamos el componente Chart y dentro de él, declaramos elementos llamados BarMark.
Un Mark es la representación visual de un dato. Para un gráfico de barras, usamos BarMark; para un gráfico de líneas, usaríamos LineMark, y así sucesivamente.
Sustituye el contenido de tu ContentView con el siguiente código:
struct ContentView: View {
var body: some View {
VStack(alignment: .leading) {
Text("Ventas Semanales de Café")
.font(.title2)
.bold()
.padding(.bottom, 10)
// Iniciamos nuestro gráfico de SwiftUI
Chart {
ForEach(datosVentas) { venta in
BarMark(
x: .value("Tipo de Café", venta.tipo),
y: .value("Cantidad", venta.cantidadVendida)
)
}
}
.frame(height: 300) // Damos una altura fija para visualizarlo correctamente
}
.padding()
}
}
Entendiendo el código:
- Chart: Es el contenedor principal de nuestro gráfico.
- ForEach: Itera sobre nuestro array
datosVentas. Al serIdentifiable, no necesitamos especificar unidadicional. - BarMark: Dibuja la barra. Los parámetros
xeydefinen los ejes. Utilizamos.value("Etiqueta", valor)para mapear nuestros datos. La “Etiqueta” es crucial, ya que Swift Charts la usa internamente para la accesibilidad (VoiceOver).
Al ejecutar esto en el simulador de Xcode, verás inmediatamente un gráfico de barras vertical limpio y minimalista.
Paso 4: Llevando el diseño al siguiente nivel (Personalización)
El gráfico por defecto es funcional, pero todo buen iOS Developer sabe que el diseño y la experiencia de usuario (UX) marcan la diferencia en la App Store. SwiftUI nos permite inyectar estilos directamente en nuestros BarMark.
Vamos a personalizar nuestro gráfico añadiendo colores, esquinas redondeadas y anotaciones que muestren el valor exacto sobre cada barra.
Chart {
ForEach(datosVentas) { venta in
BarMark(
x: .value("Tipo de Café", venta.tipo),
y: .value("Cantidad", venta.cantidadVendida)
)
// 1. Asignamos un color basado en el tipo de café
.foregroundStyle(by: .value("Tipo", venta.tipo))
// 2. Redondeamos las esquinas superiores de las barras
.cornerRadius(8)
// 3. Añadimos una anotación textual encima de la barra
.annotation(position: .top) {
Text("\(venta.cantidadVendida)")
.font(.caption)
.bold()
.foregroundColor(.secondary)
}
}
}
// 4. Ocultamos la leyenda si no la necesitamos
.chartLegend(.hidden)
.frame(height: 300)
Al usar .foregroundStyle(by:), Swift Charts automáticamente asigna una paleta de colores distinta a cada categoría y genera una leyenda. Si no deseas la leyenda, puedes ocultarla con el modificador .chartLegend(.hidden).
Paso 5: Gráficos de barras horizontales
Existen ocasiones donde las etiquetas del eje X son demasiado largas y se solapan. En la programación Swift moderna, solucionar esto es cuestión de intercambiar variables. Para crear un gráfico de barras horizontal, simplemente invertimos los ejes en nuestro BarMark.
Chart {
ForEach(datosVentas) { venta in
BarMark(
// Ahora la cantidad va en el eje X
x: .value("Cantidad", venta.cantidadVendida),
// Y el tipo de café en el eje Y
y: .value("Tipo de Café", venta.tipo)
)
.foregroundStyle(.blue.gradient) // Un gradiente elegante
}
}
.frame(height: 250)
Nota cómo hemos usado .blue.gradient. En SwiftUI, aplicar gradientes a las vistas es directo y le da un aspecto muy pulido a las aplicaciones de iOS, macOS y watchOS.
Paso 6: Agrupación de datos (Gráficos Complejos)
Para destacar como iOS Developer, debes ser capaz de manejar series de datos múltiples. Supongamos que queremos comparar las ventas de esta semana con las de la semana pasada.
Primero, ampliamos nuestro modelo en Swift:
struct VentaComparativa: Identifiable {
let id = UUID()
let tipo: String
let cantidad: Int
let periodo: String // "Esta semana" o "Semana pasada"
}
let datosComparativos: [VentaComparativa] = [
VentaComparativa(tipo: "Latte", cantidad: 250, periodo: "Esta semana"),
VentaComparativa(tipo: "Latte", cantidad: 200, periodo: "Semana pasada"),
VentaComparativa(tipo: "Espresso", cantidad: 120, periodo: "Esta semana"),
VentaComparativa(tipo: "Espresso", cantidad: 150, periodo: "Semana pasada")
]
Ahora, implementamos el gráfico agrupado en SwiftUI:
Chart {
ForEach(datosComparativos) { venta in
BarMark(
x: .value("Tipo de Café", venta.tipo),
y: .value("Cantidad", venta.cantidad)
)
// Agrupamos por tipo para que las barras aparezcan lado a lado
.foregroundStyle(by: .value("Periodo", venta.periodo))
.position(by: .value("Periodo", venta.periodo))
}
}
.frame(height: 300)
.chartForegroundStyleScale([
"Esta semana": .blue,
"Semana pasada": .gray.opacity(0.5)
])
Con el modificador .position(by:), instruimos a Swift Charts para que coloque las barras de diferentes periodos una al lado de la otra en lugar de apilarlas. Además, .chartForegroundStyleScale nos permite definir exactamente qué color queremos para cada categoría.
Escalabilidad Multiplataforma: iOS, macOS y watchOS
Una de las principales razones para dominar la programación Swift y SwiftUI hoy en día es el ecosistema de Apple. El código que acabamos de escribir para crear graficos de barras con Swift Charts en SwiftUI no necesita ser reescrito para funcionar en un Apple Watch o en un Mac.
En watchOS, donde el espacio en pantalla es crítico, SwiftUI automáticamente ajustará los márgenes y el tamaño de las fuentes del gráfico para que encaje en la muñeca del usuario. Como iOS Developer, tu única preocupación será quizás envolver el gráfico en un ScrollView si tienes múltiples elementos, o reducir la cantidad de datos (por ejemplo, mostrar solo el Top 3 de ventas) para no saturar la pantalla pequeña del Apple Watch.
En macOS, el gráfico se expandirá fluidamente. Puedes aprovechar los modificadores de SwiftUI para reaccionar al redimensionamiento de las ventanas nativas de escritorio.
Conclusión
La capacidad de visualizar datos de forma rápida, eficiente y atractiva es una habilidad invaluable. A lo largo de este artículo, hemos explorado desde los fundamentos hasta configuraciones avanzadas, descubriendo que crear graficos de barras con Swift Charts en SwiftUI es un proceso lógico, declarativo y sumamente gratificante.
Atrás quedaron los días de lidiar con frameworks pesados de terceros en Xcode. Como moderno iOS Developer, al dominar Swift Charts y la programación Swift, estás incorporando a tu arsenal de herramientas un framework oficial de Apple que te garantiza optimización de rendimiento, accesibilidad nativa y soporte en todas sus plataformas.








