在Swift中从AttributedString获取原始Markdown字符串

cld4siwp  于 2023-05-16  发布在  Swift
关注(0)|答案(2)|浏览(222)

有没有办法从AttributedString中获取Markdown字符串?我有以下代码:

let text = "**Hello** World!"
let attString = AttributedString(text)

现在我想找回Markdown字符串。我确实看到AttributedString包含了一个描述调用,试图解决这个问题,但它在结果中添加了一组括号:

print(attString.description)

结果:

**Hello** World! {
}

我想也许有更好的办法。

mbzjlibv

mbzjlibv1#

Markdown是一种构造AttributedString的方法。它不是AttributedString的内部格式。AttributedString可以表示的大多数东西甚至不能在Markdown中表示。在最基本的示例中,AttributedString可以为区域定义确切的字体。在Markdown中没有办法表达这一点。在极端情况下,AttributedString可以表示任何属性,包括在代码中定义的自定义属性,而不仅仅是Foundation定义的属性。
但在你的情况下,我相信混淆是更基本的。所谓的“Markdown”只是字符串。如果你想要它,那么它是用以下方式获取的:

String(attString.characters)

(有点令人惊讶的是,没有.string属性。This is because it's more expensive to construct than it looks.
你在这里构建的不是Markdown定义的AttributedString。这需要调用try AttributedString(markdown: text)。它只是一个字符串,碰巧有星号在它。如果你真的用Markdown创建了一个格式化的AttributedString,并且需要取回Markdown,你需要自己在一个包含AttributedString和Markdown String的 Package 器类型中跟踪它。

cyvaqqii

cyvaqqii2#

正如@paulo-mattos所建议的,以下是解决方案:

let text = "**Hello** World!"
let attString = AttributedString(text)
let data = try JSONEncoder().encode(attString)
if let stringValue = String( data: data, encoding:.utf8 ){
    print( stringValue)
}

相关问题