为什么NSAttributedString
不会继承NSString
? NSAttributedString
将父类设为NSObject
为什么?
答案 0 :(得分:1)
为什么你认为它是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
将起作用。但是myTextField.text
仍然被定义为普通字符串。所以dictionary[myTextField.text]
看起来完全正确。