So mein subview1 zeigt sich in zwei Zuständen meiner Ansicht. Derzeit wird es seit dem in keinem dieser beiden Bundesstaaten mehr angezeigt | Der Operator scheint die beiden Aufzählungswerte hinzuzufügen.
Gibt es eine Möglichkeit, das zu tun?
Dein (subview.tag == viewStatus) sieht für mich falsch aus. Sollte sein ((subview.tag & viewStatus) != 0x0), es sei denn, Sie möchten nur nach exakter Übereinstimmung suchen. In diesem Fall benötigen Sie überhaupt keine Bitmaske, sondern nur eine einfache alte Aufzählung. Siehe zweite Hälfte meiner Antwort.
– Regexident
23. April 2013 um 11:17 Uhr
Regexident
Bitmasken deklarieren:
Alternativ zur Zuweisung absoluter Werte (1, 2, 4…) können Sie deklarieren Bitmasken (wie diese heißen) so:
Sehen Sie den feinen Unterschied (und warum ist Ihr aktueller “if”-Ausdruck wahrscheinlich falsch)?
@Abizern: Danke! Ich dachte, diese Frage hätte ein bisschen mehr Erklärung verdient, als zuvor bereitgestellt wurde.
– Regexident
23. April 2013 um 11:19 Uhr
Ja, aber Sie formatieren die Binärwerte als Hexadezimalwerte (mit vorangestelltem 0x). Bitmasken arbeiten auf Bitebene. Einfacher Fehler, ich bin sicher, Sie haben es nicht einmal bemerkt. Aber jemand könnte sich das ansehen und fälschlicherweise annehmen, dass Sie maximal 8 Optionen pro Aufzählung haben können, wenn Sie tatsächlich maximal 32 verschiedene Optionen haben können. Korrektur: FileNotDownloaded = (0x1 << 0), // => %...00000001 usw.
– Michael Zimmermann
28. November 2013 um 20:49 Uhr
Apple bietet ein wunderbares Paar Makros NS_ENUM und NS_OPTION für Enum- und Bitmasken-Deklarationen. Benutze sie. Auf der NSHipster-Website finden Sie einige gute Beschreibungen.
– uchuugaka
29. November 2013 um 15:54 Uhr
Voll bewusst von ihnen. 😉 (Siehe Abizerns Antwort) Wie auch immer, eine Variation mit hinzugefügt NS_OPTIONS der Vollständigkeit halber.
– Regexident
1. Dezember 2013 um 20:25 Uhr
Recht. Ich verstehe, was du mit Überläufen meinst. Vielleicht sollte es einfach sein ((status & FileNotDownloaded) == FileNotDownloaded) also tag es sind nur zwei Ergebnisse möglich.
– uchuugaka
20. Januar 2014 um 23:40 Uhr
Abizern
Während @Regexident eine hervorragende Antwort geliefert hat, muss ich die moderne Objective-C-Methode erwähnen, mit der Enumerated-Optionen deklariert werden NS_OPTIONS:
Auf diese Weise können Sie bitweise ORs und ANDs effektiv ausführen.
Die Standardmethode zum Definieren der Werte ist 1 << 0, 1 << 1, 1 << 2 usw. Dadurch wird deutlich, dass Sie mit Bits und Masken arbeiten.
– Mike Weller
23. April 2013 um 10:58 Uhr
@AhmedAlHafoudh: Der Artikel geht jedoch nicht auf das zweite Problem von OP ein: das Arbeiten mit Bitmasken (im Gegensatz zu ihrer einfachen Deklaration). Siehe meine Antwort.
– Regexident
23. April 2013 um 11:15 Uhr
Nützliche Funktion, die Sie zur Bitmaskenprüfung verwenden können, um die Lesbarkeit zu verbessern.
Dein
(subview.tag == viewStatus)
sieht für mich falsch aus. Sollte sein((subview.tag & viewStatus) != 0x0)
, es sei denn, Sie möchten nur nach exakter Übereinstimmung suchen. In diesem Fall benötigen Sie überhaupt keine Bitmaske, sondern nur eine einfache alte Aufzählung. Siehe zweite Hälfte meiner Antwort.– Regexident
23. April 2013 um 11:17 Uhr