次のようなブールリテラルを使用したい
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)
}
条件がNSNumber
thenの場合は、次を使用します。
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
}