I want to use bool literals like
if (condition == @NO) {
}
else if (condition == @YES) {
{
When I try this, XCode wants me to use NSNumber methods to compare, like isEqualTo. Is there a simpler way to do this (without isEqualTo)? If I can't, should I use isEqualTo, isEqualToValue, or isEqualToNumber?
What is condition
? Is it a BOOL
or an NSNumber
?
If condition
is a BOOL
, then you don't want to use @NO
or @YES
at all. You want to say
if (condition) // test if condition is true
if (!condition) // test if condition is false
if (condition == NO) // same as previous, based on personal preference
Note that you should never say
if (condition == YES)
because BOOL
isn't actually restricted to 0
and 1
as values, it can hold anything in char
, so if condition
accidentally holds, say, 3
, then if (condition)
and if (condition == YES)
would behave differently.
If condition
is an NSNumber
, then you still don't want to use @NO
and @YES
. You just want to convert it to a BOOL
using -boolValue
, as in
if ([condition boolValue]) // test if condition is true
if (![condition boolValue]) // test if condition is false
if ([condition boolValue] == NO) // same as previous, based on personal preference
The basic takeaway here is, don't use @NO
and @YES
literals for comparisons. It's pointless, and inelegant, since all you'd be able to do with them is convert them back into BOOL
s.
Assuming the data type of condition
is BOOL
, then you want:
if (condition) {
// true (YES)
} else {
// false (NO)
}
If condition is an NSNumber
then use:
if ([condition boolValue]) {
// true (YES)
} else {
// false (NO)
}
If condition
is based on some arbitrary numbers then treat 0
as NO
and treat non-zero as YES
.
Again, if condition
is an NSNumber
then do:
if ([condition intValue]) {
// non-zero - true (YES)
} else {
// zero - false (NO)
}
Update: Based on the following comment from the OP:
Condition is a bool, like if (myView.frame.size.height == 30)
This implies that the actual question wanted to do checks something like:
if ((myView.frame.size.height == 30) == YES)
This is very unusual. The proper thing to do is:
if (myView.frame.size.height == 30) {
// true - height is 30
} else {
// false - height is not 30
}
There is no need to worry about false positives or negatives. The condition is either true or it isn't. There is no 3rd possibility. If the condition gives the wrong result then the solution is to fix the condition.
You can save @NO in a dictionary because @NO is an object. You cannot save NO in a dictionary. So use @NO.boolValue when needed. For example:
NSDictionary *userSetting = (NSDictionary *)[[NSUserDefaults standardUserDefaults] objectForKey:@"user"];
//Suppose you have done: userSetting[@"canWriteCode"] = @YES;
if ([userSetting[@"canWriteCode"] boolValue])
[self helloProgrammer];
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With