私がネットで見つけたほとんどの例はこれを書いています:
if(x != nil)
// ...
これに何か問題はありますか?
if(x)
// ...
単純なプログラムで両方を試しましたが、違いは見つかりませんでした。
Objective-Cでは、nil
は___DARWIN_NULL
_と呼ばれる値として定義され、基本的にif文では_0
_またはfalse
に評価されます。したがって、if (x == nil)
の書き込みはif (!x)
の書き込みと同じであり、if (x != nil)
の書き込みはif (x)
と同じです(false
と比較するため)否定を作成し、true
と比較すると条件が同じに保たれます。
どちらの方法でもコードを書くことができますが、それは本当に読みやすいと思うものに依存します。 if (x)
がより理にかなっていると思いますが、それはあなたのスタイルに依存します。
if (someCondition == true)
とif (someCondition)
を比較するようなものです。
それはすべてあなた次第で、誰がコードを読むかによって異なります。
編集: Yujiが正しく言及しているように、Objective-CはCのスーパーセットであるため、0以外の値に評価される条件はすべて真であると見なされ、したがってsomeCondition
が上記の例では、たとえば-1の整数値に評価し、true
と比較するとfalse
になり、ifステートメントは評価されません。知っておくべきこと。
両方
if (x != nil)
そして
if ( x )
同等なので、あなたの意見であなたのコードをより多くするバリアントを選んでください読みやすいあなた(そしてあなたのコードを読んでサポートする他の人)
両方とも同じであり、これはスタイルの質問であり、それはあなたが好むかどうかに要約されます:
もし何か) { ... }
versus
私は常に#1をより明確に見つけましたが、#2はドキュメントで広く使用されており、したがってフィールドで使用されるため、両方のフォームを理解し、プロジェクトが使用するものに適合し、スタイル的に一貫していることが望ましいです。
Nilをチェックする最良かつ安全な方法は
共通のメソッドを作成し、これらすべてを追加します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;
}
そしてチェック
NSString *strUuid = [Common trimWhiteSpaceAndNewLine:[dict valueForKeyPath:@"detail.uuid"]];
if (![strUuid isEqualToString:@""]) {
// do your stuff
}