Wie vergleicht man @NO und @YES mit Eleganz und ohne Risiko von falsch positiven / negativen Ergebnissen?

8

Ich möchte bool Literale wie

verwenden %Vor%

Wenn ich das versuche, will XCode, dass ich NSNumber-Methoden zum Vergleich verwende, wie isEqualTo. Gibt es einen einfacheren Weg (ohne isEqualTo)? Wenn ich nicht kann, sollte ich isEqualTo, isEqualToValue oder isEqualToNumber verwenden?

    
zakdances 25.03.2013, 03:01
quelle

5 Antworten

24

Was ist condition ? Ist es ein BOOL oder ein NSNumber ?

Wenn condition ein BOOL ist, dann möchten Sie @NO oder @YES überhaupt nicht verwenden. Du willst sagen

%Vor%

Beachten Sie, dass Sie niemals

sagen sollten %Vor%

weil BOOL nicht wirklich auf 0 und 1 als Werte beschränkt ist, kann es alles in char enthalten, wenn also condition versehentlich hält, sagen wir, 3 , dann if (condition) und if (condition == YES) würde sich anders verhalten.

Wenn condition ein NSNumber ist, dann möchten Sie immer noch @NO und @YES nicht verwenden. Sie möchten es nur in BOOL mit -boolValue konvertieren, wie in

%Vor%

Der Grund hier ist, verwenden Sie nicht @NO und @YES Literale für Vergleiche. Es ist sinnlos und unelegant, da alles, was du damit machen kannst, ist, sie in BOOL s umzuwandeln.

    
Kevin Ballard 25.03.2013, 03:30
quelle
4

Angenommen, der Datentyp von condition ist BOOL , dann möchten Sie:

%Vor%

Wenn die Bedingung NSNumber lautet, verwenden Sie:

%Vor%

Wenn condition auf einigen beliebigen Zahlen basiert, dann behandle 0 als NO und behandle nicht-null als YES .

Auch wenn condition ein NSNumber ist, dann tue:

%Vor%

Aktualisieren : Basierend auf dem folgenden Kommentar des OP:

  

Bedingung ist ein bool, wie if (myView.frame.size.height == 30)

Dies bedeutet, dass die eigentliche Frage etwas überprüfen sollte:

%Vor%

Das ist sehr ungewöhnlich. Das Richtige ist:

%Vor%

Sie müssen sich keine Sorgen über falsche Positive oder Negative machen. Die Bedingung ist entweder wahr oder nicht. Es gibt keine dritte Möglichkeit. Wenn die Bedingung das falsche Ergebnis ergibt, besteht die Lösung darin, die Bedingung zu beheben.

    
rmaddy 25.03.2013 03:06
quelle
2

Sie können @NO in einem Wörterbuch speichern, da @NO ein Objekt ist. Sie können NO in einem Wörterbuch nicht speichern. Also benutze @ NO.boolValue wenn nötig. Zum Beispiel:

%Vor%     
jack 13.08.2014 21:42
quelle
-1

Ist condition a NSNumber ? Wenn ja, benutze einfach:

%Vor%

Und übrigens, ein Wert von 0 bedeutet NEIN, jeder andere Wert ist JA;

    
Eric Qian 25.03.2013 03:07
quelle
-2

Sie können @YES.boolValue und @NO.boolValue verwenden.

Also, um mit Bool Literal zu vergleichen, können Sie etwas wie (angesichts der Tatsache, dass condition ist BOOL )

schreiben %Vor%     
anticyclope 25.03.2013 03:06
quelle