9

次のようなブールリテラルを使用したい

if (condition == @NO) {

}
else if (condition == @YES) {

{

これを試してみると、XCodeはisEqualToのようにNSNumberメソッドを使用して比較することを望んでいます。これを行うためのより簡単な方法はありますか(isEqualToなしで)?できない場合は、isEqualTo、isEqualToValue、またはisEqualToNumberを使用する必要がありますか?

4

5 に答える 5

25

conditionですか?それBOOLNSNumber


の場合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誤って保持した場合、たとえば、3if (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に戻すことだけなので、それは無意味でエレガントではありません。

于 2013-03-25T03:30:22.010 に答える
5

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番目の可能性はありません。条件が間違った結果をもたらす場合、解決策は条件を修正することです。

于 2013-03-25T03:06:37.617 に答える
2

@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];
于 2014-08-13T21:42:16.937 に答える
-1

ですか?condition_ NSNumberその場合は、次を使用してください。

if(condition.integerValue) {
    //condition is YES
} else {
    //condition is NO
}

ちなみに、値0はNOを表し、その他の値はYESです。

于 2013-03-25T03:07:56.727 に答える
-2

@YES.boolValueとを使用できます@NO.boolValue

したがって、boolリテラルと比較するには、次のように記述できます(という事実が与えられたcondition場合BOOL

if (condition == @NO.boolValue) {
  // Do something
}
于 2013-03-25T03:06:57.020 に答える