Arbeiten mit Markdown in Swift (iOS/macOS): Bibliotheken Down, SwiftMarkdown

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Markdown-Verarbeitung in Swift für iOS und macOS: vom Parsen bis zum Rendern

\n\n

Markdown ist eine der beliebtesten Auszeichnungssprachen zur Textformatierung. Im Swift-Ökosystem (iOS/macOS) gibt es mehrere leistungsstarke Bibliotheken, die das Parsen, Konvertieren und Anzeigen von Markdown ermöglichen. In diesem Artikel betrachten wir zwei Hauptbibliotheken: Down (schnell und flexibel) und SwiftMarkdown (offizielle Bibliothek von Apple). Sie erfahren, wie Sie diese in Ihre Projekte integrieren, Markdown in NSAttributedString, HTML umwandeln und in SwiftUI anzeigen.

\n\n

1. Die Bibliothek Down (cmark-basiert)

\n\n

Down ist ein Swift-Wrapper um den beliebten C-Parser cmark. Er bietet hohe Leistung und unterstützt alle grundlegenden Markdown-Elemente (Überschriften, Listen, Code, Links, Bilder, Tabellen usw.).

\n\n

Installation

\n

Fügen Sie das Paket über den Swift Package Manager hinzu:

\n
// Package.swift\ndependencies: [\n    .package(url: "https://github.com/johnxnguyen/Down.git", from: "0.11.0")\n]
\n\n

Beispiel: Konvertierung von Markdown in HTML

\n
import Down\n\nlet markdownString = "# Hallo Welt!\\n\\nDas ist **fetter Text** und *kursiv*."\nlet down = Down(markdownString: markdownString)\nlet html = try? down.toHTML()\nprint(html ?? "")\n// Ausgabe: <h1>Hallo Welt!</h1>\\n<p>Das ist <strong>fetter Text</strong> und <em>kursiv</em>.</p>
\n\n

Rendering in NSAttributedString

\n

Down kann direkt ein NSAttributedString zur Anzeige in UILabel, UITextView oder NSTextView erstellen:

\n
let attributedString = try? down.toAttributedString()\n// Verwenden Sie es in UITextView:\ntextView.attributedText = attributedString
\n\n

SwiftUI-Unterstützung

\n

Für SwiftUI können Sie einen Wrapper erstellen, der AttributedString (iOS 15+) anzeigt:

\n
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\n

2. SwiftMarkdown (von Apple)

\n\n

SwiftMarkdown ist die offizielle Apple-Bibliothek, die Teil von swift-markdown ist. Sie bietet einen vollständigen Markdown-Parser mit Anpassungsmöglichkeiten und der Generierung verschiedener Formate (HTML, CommonMark, AST).

\n\n

Installation

\n
// Package.swift\ndependencies: [\n    .package(url: "https://github.com/apple/swift-markdown.git", branch: "main")\n]
\n\n

Parsen und Arbeiten mit AST

\n

Die Bibliothek erstellt einen abstrakten Syntaxbaum (AST), der analysiert und modifiziert werden kann:

\n
import Markdown\n\nlet source = """\n# Dokumentation\n\nFunktionsliste:\n- `foo()` — erste Funktion\n- `bar()` — zweite Funktion\n"""\n\nlet document = Document(parsing: source)\nlet heading = document.child(at: 0) as? Heading\nprint(heading?.plainText ?? "") // "Dokumentation"\n\n// Durchlaufen aller Elemente\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\n

HTML-Generierung

\n
let html = document.format(options: [.unsafeTags])\nprint(html)\n// Ausgabe: <h1>Dokumentation</h1>...<ul><li><code>foo()</code> — erste Funktion</li>...
\n\n

Rendering über AttributedString (iOS 15+)

\n

SwiftMarkdown unterstützt die direkte Umwandlung in AttributedString mit Stilen:

\n
import Markdown\nimport SwiftUI\n\nstruct ContentView: View {\n    let markdown = "**Wichtig**: klicken Sie *hier*."\n\n    var body: some                    

Empfehlungen