2017-05-30 58 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]看起来完全正确。