Могу ли я сделать переключатель ([NSNull null])? (ObjC) - PullRequest
0 голосов
/ 14 февраля 2011

У меня довольно простой вопрос, и простите меня, если это кощунство, спросить его, ха-ха.

У меня есть 6 переменных, которые мне нужно проверить, если они нулевые или их длина равна 0. Поэтому я подумал, что, возможно, я мог бы использовать два переключателя, один для проверки, если это строка == [NSNull null] и один для проверка string.length == 0. Вместо того, чтобы сделать огромный и сложный, если. Переключатель, такой как:

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 ]

1 голос
/ 14 февраля 2011

Для вашего первого оператора 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, она не может совпадать ни с одной строкой!

0 голосов
/ 14 февраля 2011

Вы совершенно не понимаете, как работает оператор 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 или напишите функцию для проверки на нулевое значение. См. введите описание ссылки здесь , где я бесстыдно написал эти примеры для получения дополнительной информации.

...