Processamento de Markdown em Swift para iOS e macOS: bibliotecas e exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com Markdown em Swift (iOS/macOS): bibliotecas e exemplos práticos



Markdown é uma linguagem de marcação leve, amplamente utilizada para formatar texto em documentação, chats e aplicativos educacionais. No ecossistema Swift (iOS/macOS), existem várias bibliotecas maduras que permitem analisar, renderizar e converter Markdown em visualizações nativas. Neste artigo, abordaremos as principais ferramentas: Down, Ink e SwiftMarkdown, além de mostrar exemplos de integração em SwiftUI e UIKit.



1. Biblioteca Down (baseada em cmark)



Down é a biblioteca mais popular para trabalhar com Markdown em Swift. Ela é baseada no analisador C de alto desempenho cmark e suporta o padrão CommonMark. Down permite converter Markdown em HTML, NSAttributedString, PDF e até mesmo em AST (árvore sintática abstrata).



Instalação

Adicione em Package.swift:

dependencies: [    .package(url: "https://github.com/johnxnguyen/Down.git", from: "0.9.4")]


Exemplo: renderizando Markdown em NSAttributedString

import Down

let markdownString = "# Título

Este é um texto **negrito** e *itálico*."let down = Down(markdownString: markdownString)

do { let attributedString = try down.toAttributedString() // Use em UITextView ou UILabel textView.attributedText = attributedString} catch { print("Erro de análise: \\(error)")}


Down também suporta estilos personalizados através do DownStyler:

let styler = DownStyler(configuration: DownStylerConfiguration(    fonts: FontCollection(        heading1: .boldSystemFont(ofSize: 24),        body: .systemFont(ofSize: 16)    ),    colors: ColorCollection(        heading1: .systemBlue,        body: .label    )))let attributedString = try down.toAttributedString(styler: styler)


2. Biblioteca Ink (John Sundell)



Ink é um analisador Markdown leve do autor John Sundell. Ele não requer dependências externas (Swift puro) e é ideal para tarefas simples: extrair títulos, listas, links. Ink retorna uma árvore de blocos (elementos de nível de bloco) que pode ser personalizada.



Instalação via Swift Package Manager

dependencies: [    .package(url: "https://github.com/JohnSundell/Ink.git", from: "0.6.0")]


Exemplo: análise e extração de títulos

import Ink

let markdown = """# Título Principal## SubtítuloTexto normal com destaque **negrito**."""

let parser = MarkdownParser()let result = parser.parse(markdown)

for heading in result.headings { print("Nível \\(heading.level): \\(heading.text)")}// Saída:// Nível 1: Título Principal// Nível 2: Subtítulo


Ink também suporta modificadores personalizados para estender a sintaxe:

let modifier = Modifier(target: .inlineCode) { html, markdown in    return "<span style=\\"color: red;\\">\\(html)</span>"}let parser = MarkdownParser(modifiers: [modifier])


3. SwiftMarkdown (da Apple)



SwiftMarkdown é a biblioteca oficial da Apple, apresentada na WWDC 2022. Ela é profundamente integrada ao ecossistema SwiftUI e suporta todas as extensões Markdown, incluindo tabelas, blocos de código com destaque e listas aninhadas. SwiftMarkdown usa AttributedString do Foundation, simplificando localização e fontes dinâmicas.



Instalação

Adicione ao projeto via Xcode: File → Add Packages → apple/swift-markdown.



Exemplo: exibindo Markdown em SwiftUI

import MarkdownUIimport SwiftUI

struct ContentView: View { let markdown = """ # Bem-vindo Este é um **exemplo** usado

Recommendations