Получение необработанной строки Markdown из AttributedString в Swift
Есть ли способ получить строку Markdown из файла ? У меня есть следующий код:
let text = "**Hello** World!"
let attString = AttributedString(text)
Теперь я хочу вернуть строку Markdown. я это виделAttributedString
включает вызов описания, который пытается решить проблему, но к результату добавляется набор скобок:
print(attString.description)
Результат:
**Hello** World! {
}
Я подумал, что может быть лучший способ сделать это.
2 ответа
Markdown — это удобный способ создания AttributedString. Это не внутренний формат AttributedString. Большинство вещей, которые может представлять AttributedString, невозможно представить даже в Markdown. В самом простом примере AttributedString может определить точный шрифт для региона. В Markdown невозможно выразить это. В крайнем случае, AttributedString может представлять любые атрибуты, включая пользовательские, определенные в вашем коде, а не только те, которые определены Foundation.
Но в вашем случае, я считаю, путаница более серьезная. Рассматриваемый «Markdown» — это просто строка. Если вы этого хотите, то это можно сделать с помощью:
String(attString.characters)
(Как ни удивительно, нет.string
свойство. Это потому, что построить его дороже, чем кажется.)
То, что вы здесь создали, не является AttributedString, определенным Markdown. Для этого потребуется позвонитьtry AttributedString(markdown: text)
. Это просто строка, в которой есть звездочки. Если вы действительно создали отформатированную AttributedString с помощью Markdown и вам необходимо вернуть Markdown, вам нужно будет отслеживать это самостоятельно в типе оболочки, который содержит AttributedString и строку Markdown.
Как предложил @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)
}