NSData
に由来する属性付きテキスト(NSAttributedString
)を含むNSTextView
のインスタンスがあります。何らかのテキスト分析を行うために、書式設定なしで属性付き文字列をプレーン文字列(NSString
)に変換したい(変換の時点では、元のNSTextViewまたはそのNSTextStorageインスタンスにアクセスできない)。
これを行う最善の方法は何でしょうか?
編集:
好奇心から、私は次の結果を調べました:
[[[self textView] textStorage] words]
これは、テキスト分析を行うのに便利なもののようです。結果の配列には、NSSubTextStorageのインスタンスが含まれます(Wordの「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、Tabs(\ 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は、ドキュメントが見つからなかったため、おそらくプライベートクラスです。また、すべてのフォーマットが保持されます。
正しく理解できれば、エンコードされたNSData
を含むdata
、たとえばNSAttributedString
を使用できます。プロセスを逆にするには:
NSAttributedString *nas = [[NSAttributedString alloc] initWithData:data
options:nil
documentAttributes:NULL
error:NULL];
そして、属性なしのプレーンテキストを取得するには、次のようにします。
NSString *str = [nas string];
Swift 5の更新:
attributedText.string
Swift 5およびmacOS 10.0+の場合、NSAttributedString
には string
というプロパティがあります。string
には次のものが含まれます宣言:
var string: String { get }
NSString
オブジェクトとしてのレシーバーの文字コンテンツ。
Appleはstring
についても述べています:
添付文字は、このプロパティの値から削除されません。 [...]
次のPlaygroundコードは、NSAttributedString
インスタンスの文字列コンテンツを取得するためにstring
の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