J'ai une instance de NSData
contenant du texte attribué (NSAttributedString
) provenant d'un NSTextView
. Je veux convertir la chaîne attribuée en une chaîne simple (NSString
) sans aucune mise en forme pour faire une analyse de texte (au moment de la conversion, je n'ai pas accès au NSTextView d'origine ni à son instance NSTextStorage).
Quelle serait la meilleure façon de faire cela?
MODIFIER:
Par curiosité, j'ai examiné le résultat de:
[[[self textView] textStorage] words]
qui semblait être une chose pratique pour faire une analyse de texte. Le tableau résultant contient des instances de NSSubTextStorage (exemple ci-dessous du mot "Eastern"):
Eastern {NSFont = "\" LucidaGrande 11.00 pt. P [] (0x7ffcaae08330) fobj = 0x10a8472d0, spc = 3,48\""; NSParagraphStyle = "Alignment 0, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, Onglets (\ 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, Blocs (null), Lists (null), BaseWritingDirection -1, HyphenationFactor 0, TighteningFactor 0.05, HeaderLevel 0 ";}
NSSubTextStorage est probablement une classe privée car je n'ai pu trouver aucune documentation pour cela. Il conserve également toute la mise en forme.
Si je vous comprends bien, vous avez un NSData
, disons data
, contenant un NSAttributedString
encodé. Pour inverser le processus:
NSAttributedString *nas = [[NSAttributedString alloc] initWithData:data
options:nil
documentAttributes:NULL
error:NULL];
et pour obtenir le texte brut sans attributs, vous faites alors:
NSString *str = [nas string];
Mise à jour pour Swift 5:
attributedText.string
Avec Swift 5 et macOS 10.0+, NSAttributedString
a une propriété appelée string
. string
a ce qui suit déclaration:
var string: String { get }
Le contenu des caractères du récepteur en tant qu'objet
NSString
.
Apple déclare également à propos de string
:
Les caractères de pièce jointe ne sont pas supprimés de la valeur de cette propriété. [...]
Le code Playground suivant montre comment utiliser la propriété NSAttributedString
de string
afin de récupérer le contenu de la chaîne d'une instance 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