2017-05-30 15 views

答えて

1

なぜそれがNSStringのサブクラスであると思いますか?このクラスは、NSStringNSAttributedStringの間の相関がNSStringUILabelの比較に近くなるようにテキストを変更しています。

文字列のかなりのメソッドは、長さなどの属性付き文字列でオーバーライドできますが、空で、部分文字列です...しかし、それらの多くはできません。また、属性文字列が他のメソッドに挿入されると、さらに悪化します。

たとえば、フォントの文字列サイズは、内部的にフォント情報を保持する可能性があるため、属性付き文字列とはまったく異なります。どちらか一方の描画がまったく違っています...

属性付き文字列を他のデータ構造体に文字列として送ることは想像できますか?たとえば、属性のある文字列を何らかのJSONデータまたはデータベースに無意識に格納します。確かに、シリアル化されているときはNSStringと同じ値を返すかもしれませんが、真実にはXMLまたはHTMLの何らかの形式にシリアル化する方が意味があります。その理由は、すべてのデータで再利用するために実際にどこかに保存できるからです。

いずれにしても、NSStringNSAttributedStringにサブクラス化するのは間違いです。なぜなら、2つの機能とデータ構造が単純に大きく異なるからです。あなたは、もし私が両方とも同じスーパークラスDrawableTextまたは何かを持つことができると思う描画の観点から見ているかもしれません。しかし、それ以外のものは全く意味をなさない。たとえば、テキストが同じであるが属性が異なる2つの属性付き文字列を比較した場合、これらは同じであると言いますか?私はほとんどの場合NOと言うでしょう。無効化のためのif !previousString.isEqual(newString) self.hasChanges = trueは、その属性によって異なる必要があります。しかし、dictionary[myMutableString]のような下付き文字を書いても、その属性はまったく含まれてはいけません。

"なぜ誰かが帰属する文字列をキーとして使用するのでしょうか"と思うかもしれません。これらのことは間違って起こります。あなたはテキストフィールドを持っていて、誰かがそれに属性付きの文字列を使用することによってそれを少し上手くするので、属性付き文字列がサブクラス化されている場合はmyTextField.text = myAttributedStringが動作します。しかし、myTextField.textはまだ通常の文字列として定義されています。だからdictionary[myTextField.text]が完全に正しいように見えます。

関連する問題