我可以进行切换([NSNull null])吗? (Objc)

时间:2011-02-14 12:41:34

标签: iphone objective-c switch-statement

我有一个相当简单的问题,请原谅我,如果亵渎神圣,哈哈。

我有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...
}

感谢您的帮助!

2 个答案:

答案 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,我可以无耻地将这些示例包含在内,以获取更多信息。