Introducción: Por qué tu código grita pidiendo ayuda (y cómo MARK: lo calma)
\n\nImagina: abres un archivo Swift de 500 líneas. Tus ojos recorren la pantalla, buscas el método tableView(_:cellForRowAt:), pero te hundes en un mar de func y var. ¿Te suena? En 2025, cuando los proyectos son cada vez más complejos y la velocidad de desarrollo es crítica, esta situación es un camino directo a los errores y la pérdida de tiempo.
En Stack Overflow, la pregunta "#pragma mark in Swift?" ha acumulado miles de visitas. Y no es casualidad. Los desarrolladores que migraron de Objective-C buscaban una herramienta familiar, y los novatos, una forma de poner orden en el código. La respuesta es simple y elegante: en Swift no existe #pragma mark, pero hay un análogo más potente: // MARK:.
En este artículo no solo te contaremos cómo usar // MARK: en Swift. Te mostraremos las mejores prácticas de 2025 que convertirán tu código en una obra de arte, comprensible tanto para ti dentro de un año como para tus colegas. Prepara Xcode: será interesante.
\n\n¿Qué es // MARK: en Swift y para qué sirve?
\n\nSi alguna vez trabajaste con Objective-C, recordarás #pragma mark. Es una directiva de preprocesador que ayudaba a agrupar métodos en el panel de navegación de Xcode. En Swift se eliminó, pero se mantuvo la funcionalidad a través de comentarios especiales.
// MARK: es un comentario que Xcode interpreta como un separador de secciones. Añade en el panel de navegación (Jump Bar) un título en negrita y una línea divisoria. Se ve así:
\n\n// MARK: - Lifecycle\n\noverride func viewDidLoad() {\n super.viewDidLoad()\n}\n\n// MARK: - Table View Data Source\n\nfunc tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n return items.count\n}\n\n\nObserva el guion después de MARK: (// MARK: -). Añade una línea horizontal separadora. Sin el guion, solo será texto en negrita. Usa ambas variantes según lo mucho que quieras separar visualmente los bloques.
Palabras clave para SEO: uso de // MARK: en Swift, organización del código Swift, navegación en Xcode.
\n\nMejores prácticas de uso de // MARK: en 2025
\n\nSimplemente insertar // MARK: en todas partes es una mala idea. Esto crea ruido. Aquí tienes técnicas probadas que utilizan los mejores desarrolladores iOS.
1. Agrupa por protocolos y responsabilidades
\n\nEl escenario más común es la implementación de varios protocolos en una misma clase. No obligues a tus colegas a adivinar dónde termina UITableViewDelegate y comienza UITableViewDataSource.
final class ProfileViewController: UIViewController {\n\n // MARK: - Properties\n\n private let viewModel: ProfileViewModel\n private let tableView = UITableView()\n\n // MARK: - Lifecycle\n\n override func viewDidLoad() {\n super.viewDidLoad()\n setupUI()\n }\n\n // MARK: - UITableViewDataSource\n\n override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n return viewModel.sections.count\n }\n\n override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n // ...\n }\n\n // MARK: - UITableViewDelegate\n\n func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n viewModel.didSelectRow(at: indexPath)\n }\n\n // MARK: - Private Methods\n\n private func setupUI() {\n // ...\n }\n}\n\n\nEste es el estándar de oro. Cada bloque se encarga de una unidad lógica.
\n\n2. Usa // MARK: - para secciones lógicas dentro de la clase
\n\nIncluso si no implementas protocolos, divide las clases largas en secciones: Public Methods, Private Methods, Helpers, Acti