Преобразуйте NSAttributedString в обычный текст.
У меня есть экземпляр NSData
, содержащий атрибутный текст (NSAttributedString
), исходящий из NSTextView
. Я хочу преобразовать присланную строку в обычную строку (NSString
) без какого-либо форматирования для выполнения некоторого текстового анализа (в момент преобразования у меня нет доступа к исходному NSTextView или его экземпляру NSTextStorage).
Каким будет лучший способ сделать это?
EDIT:
Из любопытства я рассмотрел результат:
[[[self textView] textStorage] words]
которая оказалась удобной для выполнения текстового анализа. Результирующий массив содержит экземпляры NSSubTextStorage (пример ниже слова "Восточный" ):
Восточная { NSFont = "\" LucidaGrande 11.00 pt. P [] (0x7ffcaae08330) fobj = 0x10a8472d0, spc = 3,48\ "; NSParagraphStyle =" Выравнивание 0, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, вкладки (\n 28L,\n 56L,\n 84L,\n 112L,\n
140L,\n 168L,\n 196L,\n 224L,\n 252L,\n 280L,\n
308L,\n 336L\n), DefaultTabInterval 0, Блоки (null), Списки (null), BaseWritingDirection -1, HyphenationFactor 0, TighteningFactor 0.05, HeaderLevel 0 ";}
NSSubTextStorage, вероятно, является частным классом, поскольку я не мог найти для него никакой документации. Он также сохраняет все форматирование.
Ответы
Ответ 1
Если вы правильно поняли, у вас есть NSData
, скажем data
, содержащий закодированный NSAttributedString
. Чтобы отменить процесс:
NSAttributedString *nas = [[NSAttributedString alloc] initWithData:data
options:nil
documentAttributes:NULL
error:NULL];
и получить простой текст без атрибутов, которые вы затем выполните:
NSString *str = [nas string];
Ответ 2
Обновление для Swift 5:
attributedText.string
Ответ 3
В Swift 5 и macOS 10. 0+ NSAttributedString
имеет свойство, называемое string
. string
имеет следующее объявление:
var string: String { get }
Содержимое символов получателя в виде объекта NSString
.
Apple также заявляет о string
:
Символы вложения не удаляются из значения этого свойства. [...]
Следующий код Playground показывает, как использовать string
свойство NSAttributedString
для извлечения строкового содержимого экземпляра NSAttributedString
:
import Cocoa
let string = "Some text"
let attributes = [NSAttributedString.Key.underlineStyle : NSUnderlineStyle.single]
let attributedString = NSAttributedString(string: string, attributes: attributes)
/* later */
let newString = attributedString.string
print(newString) // prints: "Some text"
print(type(of: newString)) // prints: String