You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中如何让AttributedString同时保留Markdown格式与换行符?

解决SwiftUI中AttributedString解析Markdown时丢失换行的问题

要同时保留Markdown格式(如斜体)和原文本的换行符,有两种可行方案:

方案一:修改文本适配Markdown硬换行规则

Markdown规范中,段落内的硬换行需要在换行前添加两个空格。我们可以先将原文本中的\n替换为 \n(两个空格加换行),再进行AttributedString转换:

struct DetailTabView: View {
    var text: String

    var body: some View {
        // 替换原换行符为Markdown硬换行格式
        let processedText = text.replacingOccurrences(of: "\n", with: "  \n")
        // 用do-catch处理解析错误,避免try!导致崩溃
        let markdownText: AttributedString
        do {
            markdownText = try AttributedString(markdown: processedText)
        } catch {
            markdownText = AttributedString(text)
        }
        Text(markdownText)
    }
}

方案二:开启Markdown解析的硬换行选项

从iOS 15+/macOS 12+开始,AttributedString的Markdown解析支持配置选项,可直接开启单个\n作为硬换行的解析规则,无需修改原文本:

struct DetailTabView: View {
    var text: String

    var body: some View {
        var parsingOptions = AttributedString.MarkdownParsingOptions()
        // 开启硬换行解析,单个\n会被识别为换行
        parsingOptions.interpretedSyntax.insert(.hardBreaks)
        
        let markdownText: AttributedString
        do {
            markdownText = try AttributedString(markdown: text, options: parsingOptions)
        } catch {
            markdownText = AttributedString(text)
        }
        Text(markdownText)
    }
}

注意事项

  • 禁止使用try!强制解析,若文本包含无效Markdown语法会导致应用崩溃,建议用do-catch捕获错误并做兜底处理。
  • 方案二需要iOS 15+/macOS 12+及以上系统支持,若需兼容更低版本,优先选择方案一。

内容的提问来源于stack exchange,提问作者Hyoryusha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:42:23