2017-05-30 4 views

Répondre

1

Pourquoi voudriez-vous que ce soit une sous-classe de NSString? Cette classe modifie le texte jusqu'à présent que la corrélation entre les NSString et NSAttributedString est proche de comparer NSString et UILabel.

Bien que plusieurs méthodes sur la chaîne peuvent être remplacées sur la chaîne attribuée, comme la longueur, est vide, sous-chaînes ... Mais la plupart d'entre eux ne peuvent pas. Et cela devient encore pire lorsque la chaîne attribuée est insérée dans d'autres méthodes:

Par exemple, la taille de la chaîne avec la police est complètement différente pour la chaîne attribuée puisqu'elle peut contenir des informations de police en interne. Le dessin de l'un ou l'autre est complètement différent ...

Et pouvez-vous imaginer l'envoi d'une chaîne affectée en tant que chaîne à d'autres structures de données. Par exemple, empaquetant sans le savoir la chaîne attribuée dans certaines données JSON ou dans la base de données. Bien sûr, il peut renvoyer la même valeur que NSString lors de la sérialisation, mais en toute honnêteté, il est plus logique de sérialiser en une forme de XML ou de HTML. La raison en est que vous pouvez réellement l'enregistrer quelque part pour la réutiliser avec toutes ses données.

De toute façon, il ne serait pas correct de sous-classer un NSString à NSAttributedString parce que la fonctionnalité et les structures de données des deux sont simplement trop différentes. Vous pouvez regarder si dans une perspective de dessin où je suppose que les deux pourraient avoir la même superclasse que DrawableText ou quelque chose. Mais tout ce qui va au-delà n'a aucun sens. Par exemple, si vous avez comparé deux chaînes attribuées dont le texte est identique mais avec des attributs différents, diriez-vous que ce sont les mêmes? Je dirais que NO pour la plupart des cas. if !previousString.isEqual(newString) self.hasChanges = true pour l'invalidation aurait besoin de différer avec ses attributs. Mais faire un indice comme dictionary[myMutableString] ne devrait pas inclure les attributs du tout.

Vous pourriez penser "Pourquoi quelqu'un utiliserait-il une chaîne attribuée comme clé?". Ces choses arrivent par erreur. Vous avez un champ de texte et quelqu'un le rend un peu plus agréable en utilisant une chaîne de caractères attribuée, donc myTextField.text = myAttributedString fonctionnerait si la chaîne attribuée était sous-classée. Mais alors myTextField.text est toujours défini comme une chaîne normale. Donc dictionary[myTextField.text] semble complètement correct.