Procesamiento de Markdown en Swift para iOS y macOS: desde el análisis hasta el renderizado
\n\nMarkdown es uno de los lenguajes de marcado más populares para formatear texto. En el ecosistema Swift (iOS/macOS) existen varias bibliotecas potentes que permiten analizar, convertir y mostrar Markdown. En este artículo veremos dos bibliotecas principales: Down (rápida y flexible) y SwiftMarkdown (biblioteca oficial de Apple). Aprenderá cómo integrarlas en sus proyectos, convertir Markdown a NSAttributedString, HTML y mostrarlo en SwiftUI.
1. Biblioteca Down (basada en cmark)
\n\nDown es un envoltorio sobre el popular analizador C cmark, escrito en Swift. Proporciona un alto rendimiento y soporta todos los elementos básicos de Markdown (encabezados, listas, código, enlaces, imágenes, tablas, etc.).
Instalación
\nAñada el paquete a través de Swift Package Manager:
\n// Package.swift\ndependencies: [\n .package(url: "https://github.com/johnxnguyen/Down.git", from: "0.11.0")\n]\n\nEjemplo: conversión de Markdown a HTML
\nimport Down\n\nlet markdownString = "# ¡Hola, mundo!\\n\\nEste es **texto en negrita** y *cursiva*."\nlet down = Down(markdownString: markdownString)\nlet html = try? down.toHTML()\nprint(html ?? "")\n// Salida: <h1>¡Hola, mundo!</h1>\\n<p>Este es <strong>texto en negrita</strong> y <em>cursiva</em>.</p>\n\nRenderizado en NSAttributedString
\nDown puede crear directamente un NSAttributedString para mostrarlo en UILabel, UITextView o NSTextView:
let attributedString = try? down.toAttributedString()\n// Úselo en UITextView:\ntextView.attributedText = attributedString\n\nSoporte para SwiftUI
\nPara SwiftUI se puede crear un envoltorio que muestre AttributedString (iOS 15+):
struct MarkdownView: View {\n let markdown: String\n\n var body: some View {\n if let nsAttr = try? Down(markdownString: markdown).toAttributedString() {\n Text(AttributedString(nsAttr))\n } else {\n Text(markdown)\n }\n }\n}\n\n2. SwiftMarkdown (de Apple)
\n\nSwiftMarkdown es la biblioteca oficial de Apple, que forma parte de swift-markdown. Proporciona un analizador completo de Markdown con posibilidad de personalización y generación de varios formatos (HTML, CommonMark, AST).
Instalación
\n// Package.swift\ndependencies: [\n .package(url: "https://github.com/apple/swift-markdown.git", branch: "main")\n]\n\nAnálisis y trabajo con AST
\nLa biblioteca construye un árbol de sintaxis abstracta (AST) que se puede analizar y modificar:
\nimport Markdown\n\nlet source = """\n# Documentación\n\nLista de funciones:\n- `foo()` — primera función\n- `bar()` — segunda función\n"""\n\nlet document = Document(parsing: source)\nlet heading = document.child(at: 0) as? Heading\nprint(heading?.plainText ?? "") // "Documentación"\n\n// Recorrer todos los elementos\nfor child in document.children {\n if let list = child as? UnorderedList {\n for item in list.children {\n print((item as? ListItem)?.plainText ?? "")\n }\n }\n}\n\nGeneración de HTML
\nlet html = document.format(options: [.unsafeTags])\nprint(html)\n// Salida: <h1>Documentación</h1>...<ul><li><code>foo()</code> — primera función</li>...\n\nRenderizado mediante AttributedString (iOS 15+)
\nSwiftMarkdown soporta la conversión directa a AttributedString usando estilos:
import Markdown\nimport SwiftUI\n\nstruct ContentView: View {\n let markdown = "**Importante**: pulse *aquí*."\n\n var body: some También en la biblioteca
Métricas de Prometheus en Go: creación y exportación de métricas en Golang
Guía completa de SwiftyJSON para Swift con ejemplos
Tokens JWT en PHP: Guía completa de autenticación y autorización