Arbeiten mit Markdown in Swift (iOS/macOS): Bibliotheken und praktische Beispiele
Markdown ist eine leichtgewichtige Auszeichnungssprache, die häufig zur Textformatierung in Dokumentationen, Chats und Bildungsanwendungen verwendet wird. Im Swift-Ökosystem (iOS/macOS) gibt es mehrere ausgereifte Bibliotheken, die das Parsen, Rendern und Konvertieren von Markdown in native Darstellungen ermöglichen. In diesem Artikel betrachten wir die wichtigsten Werkzeuge: Down, Ink und SwiftMarkdown, und zeigen Beispiele für die Integration in SwiftUI und UIKit.
1. Die Bibliothek Down (cmark-basiert)
Down ist die beliebteste Bibliothek für die Arbeit mit Markdown in Swift. Sie basiert auf dem leistungsstarken C-Parser cmark und unterstützt den CommonMark-Standard. Down ermöglicht die Konvertierung von Markdown in HTML, NSAttributedString, PDF und sogar in AST (Abstract Syntax Tree).
Installation
Fügen Sie in Package.swift hinzu:
dependencies: [ .package(url: "https://github.com/johnxnguyen/Down.git", from: "0.9.4")]Beispiel: Rendern von Markdown in NSAttributedString
import Down
let markdownString = "# Überschrift
Dies ist **fetter** Text und *kursiver* Text."let down = Down(markdownString: markdownString)
do { let attributedString = try down.toAttributedString() // Verwenden Sie in UITextView oder UILabel textView.attributedText = attributedString} catch { print("Parsing-Fehler: \\(error)")}Down unterstützt auch benutzerdefinierte Stile über 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. Die Bibliothek Ink (John Sundell)
Ink ist ein leichtgewichtiger Markdown-Parser von John Sundell. Er benötigt keine externen Abhängigkeiten (reines Swift) und eignet sich ideal für einfache Aufgaben: Extrahieren von Überschriften, Listen, Links. Ink gibt einen Baum von Blockelementen (block-level elements) zurück, der angepasst werden kann.
Installation über Swift Package Manager
dependencies: [ .package(url: "https://github.com/JohnSundell/Ink.git", from: "0.6.0")]Beispiel: Parsen und Extrahieren von Überschriften
import Ink
let markdown = """# Hauptüberschrift## UnterüberschriftNormaler Text mit **fetter** Hervorhebung."""
let parser = MarkdownParser()let result = parser.parse(markdown)
for heading in result.headings { print("Ebene \\(heading.level): \\(heading.text)")}// Ausgabe:// Ebene 1: Hauptüberschrift// Ebene 2: UnterüberschriftInk unterstützt auch benutzerdefinierte Modifikatoren zur Erweiterung der Syntax:
let modifier = Modifier(target: .inlineCode) { html, markdown in return "<span style=\\"color: red;\\">\\(html)</span>"}let parser = MarkdownParser(modifiers: [modifier])3. SwiftMarkdown (von Apple)
SwiftMarkdown ist die offizielle Bibliothek von Apple, vorgestellt auf der WWDC 2022. Sie ist tief in das SwiftUI-Ökosystem integriert und unterstützt alle Markdown-Erweiterungen, einschließlich Tabellen, Codeblöcke mit Syntaxhervorhebung und verschachtelte Listen. SwiftMarkdown verwendet AttributedString aus Foundation, was die Lokalisierung und dynamische Schriftarten vereinfacht.
Installation
Fügen Sie das Projekt über Xcode hinzu: File → Add Packages → apple/swift-markdown.
Beispiel: Anzeigen von Markdown in SwiftUI
import MarkdownUIimport SwiftUI
struct ContentView: View { let markdown = """ # Willkommen Dies ist ein **Beispiel** der Verwendung Auch in der Bibliothek
Security Crypto für Kotlin: Komplettguide mit Beispielen
Objektserialisierung in Kotlin: Bibliotheken und Codebeispiele
Typegoose für TypeScript: Vollständiges Tutorial mit Beispielen
PM2: Überwachung und Verwaltung von JavaScript-Anwendungen
PDF-Generierung in Rust: Überblick über Bibliotheken und Werkzeuge