次のようなブールリテラルを使用したい
if (condition == @NO) {
}
else if (condition == @YES) {
{
これを試してみると、XCodeはisEqualToのようにNSNumberメソッドを使用して比較することを望んでいます。これを行うためのより簡単な方法はありますか(isEqualToなしで)?できない場合は、isEqualTo、isEqualToValue、またはisEqualToNumberを使用する必要がありますか?
次のようなブールリテラルを使用したい
if (condition == @NO) {
}
else if (condition == @YES) {
{
これを試してみると、XCodeはisEqualToのようにNSNumberメソッドを使用して比較することを望んでいます。これを行うためのより簡単な方法はありますか(isEqualToなしで)?できない場合は、isEqualTo、isEqualToValue、またはisEqualToNumberを使用する必要がありますか?
何conditionですか?それBOOLはNSNumber?
の場合conditionは、BOOL使用したくない@NOか@YES、まったく使用しません。あなたが言いたい
if (condition) // test if condition is true
if (!condition) // test if condition is false
if (condition == NO) // same as previous, based on personal preference
あなたは決して言うべきではないことに注意してください
if (condition == YES)
BOOLは実際には値に制限されていない0ため、1値として何でも保持できますchar。したがって、condition誤って保持した場合、たとえば、3とif (condition)はif (condition == YES)異なる動作をします。
の場合conditionは、NSNumberまだ使用したくない@NOと@YESです。BOOLのように、を使用-boolValueして変換したいだけです
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
@NOここでの基本的なポイントは、比較に@YESリテラルを使用しないことです。BOOLそれらを使ってできることは、それらをsに戻すことだけなので、それは無意味でエレガントではありません。
conditionのデータ型がであると仮定すると、次のBOOLようになります。
if (condition) {
// true (YES)
} else {
// false (NO)
}
条件がNSNumberthenの場合は、次を使用します。
if ([condition boolValue]) {
// true (YES)
} else {
// false (NO)
}
conditionが任意の数に基づいている場合は、ゼロ以外を0としてNO扱い、ゼロ以外をとして扱いますYES。
繰り返しますconditionが、もしそうなら、次のNSNumberようにします。
if ([condition intValue]) {
// non-zero - true (YES)
} else {
// zero - false (NO)
}
更新:OPからの次のコメントに基づく:
条件は、if(myView.frame.size.height == 30)のようにブール値です。
これは、実際に実行したい質問が次のようなチェックを行うことを意味します。
if ((myView.frame.size.height == 30) == YES)
これは非常に珍しいことです。適切なことは次のとおりです。
if (myView.frame.size.height == 30) {
// true - height is 30
} else {
// false - height is not 30
}
誤検知や誤検知について心配する必要はありません。条件は真であるかそうでないかのどちらかです。3番目の可能性はありません。条件が間違った結果をもたらす場合、解決策は条件を修正することです。
@NOはオブジェクトであるため、@NOを辞書に保存できます。NOを辞書に保存することはできません。したがって、必要に応じて@NO.boolValueを使用してください。例えば:
NSDictionary *userSetting = (NSDictionary *)[[NSUserDefaults standardUserDefaults] objectForKey:@"user"];
//Suppose you have done: userSetting[@"canWriteCode"] = @YES;
if ([userSetting[@"canWriteCode"] boolValue])
[self helloProgrammer];
ですか?condition_ NSNumberその場合は、次を使用してください。
if(condition.integerValue) {
//condition is YES
} else {
//condition is NO
}
ちなみに、値0はNOを表し、その他の値はYESです。
@YES.boolValueとを使用できます@NO.boolValue。
したがって、boolリテラルと比較するには、次のように記述できます(という事実が与えられたcondition場合BOOL)
if (condition == @NO.boolValue) {
// Do something
}