【问题标题】:How to check multiple Switch case value in Objective-C?如何在 Objective-C 中检查多个 Switch case 值?
【发布时间】:2020-05-08 12:07:57
【问题描述】:

Swift 中是 possible 来检查像这样的元组,

switch(type1, type2) {
    case (1, 1):
        functionNormal()
    case (1, 2):
        functionUncommon()
    case (1, 3):
        functionRare()
    ...
}

是否可以在 Objective-C Switch 案例中检查元组之类的多个值? 有什么办法吗?

【问题讨论】:

  • 我认为在objective-c中没有定义tuple,那你不能!
  • @ArashEtemad 我知道 tuple 没有在objective-c中定义,但有什么办法吗?
  • 您应该按一个值通过开关,然后在每种情况下使用另一个开关或 if-else

标签: ios objective-c switch-statement


【解决方案1】:

可能有多种方法,具体取决于您的 type1type2 数据可能是什么。

但是,这是一个基本示例:

NSInteger i = 1;
NSInteger j = 2;

switch (i) {
    case 1:
        switch (j) {
            case 1:
                [self functionNormal];
                break;

            case 2:
                [self functionUncommon];
                break;

            case 3:
                [self functionRare];
                break;

            default:
                NSLog(@"first value: 1 ... missing case for second value: for %ld", (long)j);
                break;
        }
        break;

    case 2:
        switch (j) {
            case 1:
                [self secondFunctionNormal];
                break;

            case 2:
                [self secondFunctionUncommon];
                break;

            case 3:
                [self secondFunctionRare];
                break;

            default:
                NSLog(@"first value: 2 ... missing case for second value: %ld", (long)j);
                break;
        }
        break;

    default:
        NSLog(@"missing first case for first value: %ld", (long)i);
        break;
}

当然,这是相当低效的,但也许它可以让你上路。


编辑

同样,这取决于您的数据,但另一种方法更类似于您的 Swift 示例:

NSInteger i = 1;
NSInteger j = 2;

NSInteger ij = i * 1000 + j;

switch (ij) {
    case 1001:
        [self functionNormal];
        break;

    case 1002:
        [self functionUncommon];
        break;

    case 1003:
        [self functionRare];
        break;

    case 2001:
        [self secondFunctionNormal];
        break;

    case 2002:
        [self secondFunctionUncommon];
        break;

    case 2003:
        [self secondFunctionRare];
        break;

    default:
        NSLog(@"case was something else: %ld", (long)ij);
        break;
}

【讨论】:

  • 虽然不切实际,但您的第二个选项理论上并不是 100% 准确,因为它可能最终导致 i=0, j=1000i=1, j = 0 发生冲突,并且值得在您的解决方案中提及。谢谢。
  • @SazzadHissainKhan - 正是,这就是为什么我说 取决于您的 type1 和 type2 数据究竟是什么。 对于那个具体的例子,您将I 乘以一个比j 可以达到的最大值更高的值。可能值得重复:可能有多种方法 - 这些都不是 I 会做的,但我相信它回答了 “有什么办法吗?”
猜你喜欢
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多