Objective-C if语句评估

时间:2014-08-07 09:23:18

标签: ios objective-c if-statement

我想查看这句话:

 if([optionsDictionary objectForKey:@"showTimes"] 
     && [[optionsDictionary objectForKey:@"showTimes"]isEqualToString:@"1"])

应用程序崩溃。问题是 - Objective-C会检查所有条件吗? 因为在C#中如果1条件失败则不会检查第二个

2 个答案:

答案 0 :(得分:1)

使用[[optionsDictionary objectForKey:@"showTimes"] boolValue]确定它是0还是1。

将您的条件修改为

if([optionsDictionary objectForKey:@"showTimes"] 
 && (1 == [[optionsDictionary objectForKey:@"showTimes"] boolValue]))

答案 1 :(得分:0)

(1)如果陈述和&&和||在Objective-C中对运算符的评估与在C,C ++或Java中进行评估完全相同。

(2)如果您向nil的对象发送任何消息,结果将为0 / NO / nil。因此,&&毫无意义。你可以写完

if ([[optionsDictionary objectForKey:@"showTimes"]isEqualToString:@"1"])

顺便说一下,通过将对象与nil进行比较来检查对象是否为零,这样就不会让自己和其他人感到困惑。

(3)将方法isEqualToString发送到非NSString的对象将崩溃。崩溃将告诉您发送给哪种对象的消息。 NSCFBoolean是一个带有布尔值的NSNumber,所以它崩溃了。

您需要知道词典中的内容,或者检查它。如果您没有自己将这些值放入字典中,那么您就不知道那里有什么。例如,如果您使用解析器来解析JSON文档,那么如果JSON文档包含空值,则当前代码将再次崩溃。或者字典。

最好的办法,因为这会一次又一次地发生,就是用一个方法boolValueForKey编写一个NSDictionary类:它会为你做所有的检查。