为什么NSAttributedString没有被NSString继承? NSAttributedString具有父类作为NSObject为什么?
为什么NSAttributedString
不是继承NSString
? NSAttributedString
有父类作为NSObject
为什么?为什么NSAttributedString没有被NSString继承? NSAttributedString具有父类作为NSObject为什么?
你为什么期望它是NSString
的子类?该类修改了文本,以至于NSString
和NSAttributedString
之间的相关性接近于比较NSString
和UILabel
。
虽然字符串上的很多方法都可以在属性字符串上被覆盖,如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]
看起来完全正确。