Подтвердить что ты не робот

Преобразуйте 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, вероятно, является частным классом, поскольку я не мог найти для него никакой документации. Он также сохраняет все форматирование.

4b9b3361

Ответ 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