Most of the examples I found on the net write this:
if(x != nil)
// ...
Is there any problems with this?
if(x)
// ...
I tried both in a simple program and couldn't found any difference.
Most of the examples I found on the net write this:
if(x != nil)
// ...
Is there any problems with this?
if(x)
// ...
I tried both in a simple program and couldn't found any difference.
In Objective-C, nil
is defined as a value called __DARWIN_NULL
, which essentially evaluates to 0
or false
in if-statements. Therefore, writing
if (x == nil)
is the same as writing if (!x)
and writing if (x != nil)
is equal to if (x)
(since comparing to false
creates a negation, and comparing to true
keeps the condition the same).
You can write your code either way, and it really depends on which you think is more readable. I find if (x)
to make more sense, but it depends on your style.
It's like comparing if (someCondition == true)
versus if (someCondition)
.
It all depends on you, and who's going to be reading the code.
Edit: As Yuji correctly mentions, since Objective-C is a superset of C, any condition that evaluates to a value other than 0 is considered to be true, and therefore, if someCondition
in the example above were to evaluate to an integer value of, say, -1, comparing it to true
would result in false
, and the if-statement would not be evaluated. Something to be aware of.
someCondition
evaluates to a boolean, but that is an important warning. –
Missi nil
is essentially equal to 0, so those conditions evaluate to to if (0)
and if (0 != 0)
, both of which are false. –
Missi nil
(those are disparate types, and even if the compiler allows you to do that, it's just not semantically correct). if (x)
and if (x == 0)
are both more correct in that context (though you should probably just stick to if (x)
). –
Missi mutableArray
should be changed to eventItemIds
, correct? What happens if you change the code to read NSString *name = event.name; if (name) { [eventItemIds addObject:name]; }
? –
Missi backgroundManagedObjectContext
, I assume there must be more than one thread/queue doing work here...) –
Missi Both
if (x != nil)
and
if ( x )
are equivalent, so pick the variant that in your opinion makes your code more readable for you (and others who will read and support your code)
Both are the same and this is a style question and it boils down to whether you prefer:
if (something) { ... }
versus
I have always found #1 more clear but #2 is used extensively in documentation and hence the field so it is better to both know both forms and adapt to what a project uses and be stylistically consistent.
The best and safe way to check nil is
Make a common method, and add all these null :
+ (NSString *)trimWhiteSpaceAndNewLine:(NSString *)string {
NSString *stringSource = [NSString stringWithFormat:@"%@",string];
if ([stringSource isEqualToString:@"(null)"]) {
stringSource = @"";
return stringSource;
}
if ([stringSource isEqualToString:@"<null>"]) {
stringSource = @"";
return stringSource;
}
if ([stringSource isEqualToString:@"<nil>"]) {
stringSource = @"";
return stringSource;
}
if ([stringSource isKindOfClass:[NSNull class]]) {
stringSource = @"";
return stringSource;
}
if ([stringSource isEqualToString:@""]) {
stringSource = @"";
return stringSource;
}
if (stringSource == nil) {
stringSource = @"";
return stringSource;
}
NSString *stringFinal = [stringSource stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
return stringFinal;
}
And check
NSString *strUuid = [Common trimWhiteSpaceAndNewLine:[dict valueForKeyPath:@"detail.uuid"]];
if (![strUuid isEqualToString:@""]) {
// do your stuff
}
© 2022 - 2024 — McMap. All rights reserved.
if(someCondition==true)
is discouraged, because in C-derived languages, any value other than 0 can be in principle regarded as a Boolean true value, but due to historical reasons ifsomeCondition
is-1
andtrue
is defined as1
thensomeCondition==true
evaluates to false. – Televisor