首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在switch语句中使用NSString

在switch语句中使用NSString
EN

Stack Overflow用户
提问于 2010-11-19 19:26:09
回答 6查看 54.9K关注 0票数 55

是否可以在switch语句中使用NSString

还是只使用if / else if更好

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-11-19 19:29:46

switch语句需要整数常量,所以这里不能使用NSString,所以看起来你必须使用if/else选项。

还有一点是,您必须使用isEqualToString:或NSStrings :方法比较比较,因此即使允许在切换情况下使用指针值,您也不能使用它们

票数 54
EN

Stack Overflow用户

发布于 2012-10-04 00:34:38

我在我的应用程序中使用这些宏。

代码语言:javascript
复制
#define CASE(str)                       if ([__s__ isEqualToString:(str)]) 
#define SWITCH(s)                       for (NSString *__s__ = (s); ; )
#define DEFAULT   

SWITCH (string) {
    CASE (@"AAA") {
        break;
    }
    CASE (@"BBB") {
        break;
    }
    CASE (@"CCC") {
        break;
    }
    DEFAULT {
        break;
    }
 }
票数 72
EN

Stack Overflow用户

发布于 2012-02-13 18:22:50

Switch语句不适用于NSString:它只适用于int。

If/Else语句的代码太多,而且通常不是最优的。

最佳解决方案是使用由NSString (或其他对象)可能性索引的NSDictionary。然后直接访问正确的值/函数。

示例1,当您想测试@"A“或@"B”并执行methodA或methodB时:

代码语言:javascript
复制
NSDictionary *action = @{@"A" : [NSValue valueWithPointer:@selector(methodA)],
                         @"B" : [NSValue valueWithPointer:@selector(methodB)],
                         };
[self performSelector:[action[stringToTest] pointerValue]];

示例2,当您想测试@"A“或@"B”并执行blockA或blockB时:

代码语言:javascript
复制
NSDictionary *action = @{@"A" : ^{ NSLog (@"Block A"); },
                         @"B" : ^{ NSLog (@"Block B"); },
                         };
((void (^)())action[stringToTest])();
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4224495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档