我想使用 bool 文字,如
if (condition == @NO) {
}
else if (condition == @YES) {
{
当我尝试这个时,XCode 希望我使用 NSNumber 方法进行比较,比如 isEqualTo。有没有更简单的方法来做到这一点(没有 isEqualTo)?如果不能,我应该使用 isEqualTo、isEqualToValue 还是 isEqualToNumber?
我想使用 bool 文字,如
if (condition == @NO) {
}
else if (condition == @YES) {
{
当我尝试这个时,XCode 希望我使用 NSNumber 方法进行比较,比如 isEqualTo。有没有更简单的方法来做到这一点(没有 isEqualTo)?如果不能,我应该使用 isEqualTo、isEqualToValue 还是 isEqualToNumber?
是什么condition
?它是一个BOOL
还是一个NSNumber
?
如果condition
是 a 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
and1
作为值,它可以在 中保存任何东西char
,所以如果condition
不小心持有,比如说,3
,那么if (condition)
和if (condition == YES)
会表现不同。
如果condition
是NSNumber
,那么您仍然不想使用@NO
and @YES
。您只想将其转换为BOOL
using -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
然后使用:
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 的以下评论:
Condition 是一个布尔值,例如 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
}
无需担心误报或误报。条件要么为真,要么不为真。没有第三种可能。如果条件给出错误的结果,则解决方案是修复条件。
您可以将@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
}