2010-12-07 4 views
4

J'ai vu la ligne suivante de code here tout en recherchant une réponse à another question of mine.S'il vous plaît expliquer cette façon étrange de réglage accessoire de la cellule

cell.accessoryType = (UITableViewCellAccessoryNone + UITableViewCellAccessoryCheckmark) - cell.accessoryType; 

Il semble, à partir de ce fil, que le code fonctionne. Je me demande simplement si ce code n'est pas redondant? Si vous connaissez le accessoryType, pourquoi le soustraire de cette expression?

Répondre

4

Si le type accessoireType était UITableViewCellAccessoryNone, le réseau de l'expression le définirait sur UITableViewCellAccessoryCheckmark.

Si le type accessoryType était UITableViewCellAccessoryCheckmark, le réseau de l'expression le définirait sur UITableViewCellAccessoryNone.

Il est juste un raccourci pour dire

if (cell.accessoryType == UITableViewCellAccessoryNone) 
    cell.accessoryType = UITableViewCellAccessoryCheckmark 
else if (cell.accessoryType == UITableViewCellAccessoryCheckmark) 
    cell.accessoryType = UITableViewCellAccessoryNone 

Certainement un exemple de code ... Je Obfuscated l'éviter.

+0

Cool, c'est logique. Merci! – Moshe

1

Étant donné que ce code est de basculer entre UITableViewCellAccessoryCheckmark et UITableViewCellAccessoryNone et tente d'être concis, une autre alternative - que je trouve plus claire - serait:

cell.accessoryType ^= UITableViewCellAccessoryCheckmark|UITableViewCellAccessoryNone; 

Cette déclaration est plus claire dans son intention et évite la nécessité d'une déclaration conditionnelle - qui pourrait ou non être utile selon la fréquence à laquelle elle est appelée.

+0

Intéressant - Je trouve celui-ci * moins * lisible :-) – Cameron

+0

Moins lisible que l'autre réponse ou l'énoncé original en question? Je regarde la déclaration originale et pense à moi-même: "Pourquoi sur Terre ajoutent-ils des bitmasks?" En ce qui concerne la réponse acceptée, je suppose que c'est une question de style: vous trouverez souvent des énoncés comme celui de ma réponse dans un code écrit par des EE - peut-être une approche différente de la programmation, discutable ou non. –

+0

Eh bien, au moins, vous n'avez pas suggéré un opérateur ternaire. –

Questions connexes