我有一个相当简单的问题,请原谅我,如果亵渎神圣,哈哈。
我有6个变量需要测试它们是否为null或者它们的长度是0.所以我想可能我可以使用两个开关,一个用于测试它是否为string == [NSNull null]和一个用于测试string.length == 0.而不是制作一个庞大而复杂的if。 开关如:
switch([NSNull null])
{
case string:
Do something
break;
case string2:
Do something else
break;
// etc...
}
然后是另一个如:
switch( length==0) //I know length==0 doesn't work, but maybe you know an alternative
{
case string:
Do something
break;
case string2:
Do something else
break;
// etc...
}
感谢您的帮助!
答案 0 :(得分:1)
对于您的第一个switch语句,您不能在开关括号内的对象(NSNull的实例返回[NSNull null]
)。您必须仅在括号内使用基元。此外,你的整个过程显然是有缺陷的,因为[NSNull null]将始终返回相同类型的对象(表示空值的对象),因此你没有任何东西可以打开,而不是打开一个整数,从而你的case语句可以用于不同的整数。
对于你的第二个switch语句,你不能(再次)为你的情况使用对象(NSString当然是一个对象)。这里最好的做法是使用一系列if else子句,如下所示:
if ([string length] == 0)
{
if ([string isEqualTo:@"firstStringToCheck"])
{
// Do something.
}
else if ([string isEqualTo:@"secondStringToCheck"])
{
// Do something else.
}
}
请注意,我还使用名为length的实例方法来获取字符串的长度并检查它是否为0.这似乎是您在示例中尝试做的事情,但也完全没有意义我。当你知道如果字符串的长度为0时,你为什么要用其他字符串检查字符串呢?它不可能匹配任何字符串!
答案 1 :(得分:0)
你完全误解了switch语句的工作原理。它旨在测试一组可能值的多个可能变量。具体来说就是替换代码:
if (value == 0)
NSLog (@"zero");
else if (value == 1)
NSLog (@"one");
else if (value == 2)
NSLog (@"two");
else if (value == 3)
NSLog (@"three");
else if (value == 4)
NSLog (@"four");
else if (value == 5)
NSLog (@"five");
else
NSLog (@"Integer out of range");
带
switch (value)
{
case 0:
NSLog (@"zero");
break;
case 1:
NSLog (@"one");
break;
case 2:
NSLog (@"two");
break;
case 3:
NSLog (@"three");
break;
case 4:
NSLog (@"four");
break;
case 5:
NSLog (@"five");
default:
NSLog (@"Integer out of range");
break;
}
您目前正在做的事情会给您带来意想不到的结果。使用if语句,或编写一个函数来处理null测试。请参阅enter link description here,我可以无耻地将这些示例包含在内,以获取更多信息。