2017-05-30 57 views

回答

1

你爲什麼期望它是NSString的子類?該類修改了文本,以至於NSStringNSAttributedString之間的相關性接近於比較NSStringUILabel

雖然字符串上的很多方法都可以在屬性字符串上被覆蓋,如length,但爲空,子字符串......但其中很多方法可能不會。當屬性字符串被插入到其他方法時,情況會變得更糟:

例如字符串字體大小與屬性字符串完全不同,因爲它可能會在內部保存字體信息。其中一個或另一個的繪圖是完全不同的...

你能想象發送一個屬性字符串作爲字符串到其他數據結構。例如在不知情的情況下將屬性字符串打包到某些JSON數據或數據庫中。確定它在序列化時可能返回與NSString相同的值,但如實地將序列化成某種形式的XML或HTML更有意義。這樣做的原因是您可以將其保存在某個地方以便重新使用所有數據。

無論如何,將NSString轉換爲NSAttributedString是不正確的,因爲兩者的功能和數據結構完全不同。你可以從圖紙的角度來看看,我猜兩者都可以擁有與DrawableText相同的超類。但是除此之外的一切都毫無意義。例如,如果您比較了兩個屬性相同但字符串相同但屬性不同的字符串,那麼您會說這些字符串是否相同?大多數情況下,我會說「不」。 if !previousString.isEqual(newString) self.hasChanges = true無效需要與其屬性不同。但是,像dictionary[myMutableString]這樣的下標不應該包含屬性。

您可能會認爲「爲什麼有人會將屬性字符串用作關鍵字?」。這些事情是錯誤發生的。你有一個文本字段,有人通過使用它的屬性字符串使它更好一些,所以myTextField.text = myAttributedString將工作,如果屬性的字符串是subclassed。但是myTextField.text仍然被定義爲普通字符串。所以dictionary[myTextField.text]看起來完全正確。