首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我在不同的地方做同样的if声明。我怎么能让这个更有效率呢?

我在不同的地方做同样的if声明。我怎么能让这个更有效率呢?
EN

Stack Overflow用户
提问于 2011-02-02 00:29:06
回答 3查看 205关注 0票数 0

在我的应用程序中,它可以在不同的地方发现每周的一天,并执行不同的任务。例如:

代码语言:javascript
代码运行次数:0
运行
复制
if ([weekDayString isEqualToString:@"Monday"]) {

mondayAlarm = @"ON";

}

else if ([weekDayString isEqualToString:@"Tuesday"]) {

tuesdayAlarm = @"ON";

}

等。

在我的代码中的不同地方,它用不同的输出执行相同的7 if语句集。因此,我有两个问题,如何减少重复。

  1. 有没有办法把这句话简化为7 if语句,而不对我想要发生的每一个领域重复一遍呢?
  2. ,你会注意到我与平日有关的变量都有工作日。有什么办法可以比重复相同的代码重复7次更聪明吗?

非常感激的帮助。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-02 03:26:24

以下是Yakuru提出的关于更多细节的要求:

代码语言:javascript
代码运行次数:0
运行
复制
typedef enum Days { SUN, MON, TUE, WED, THUR, FRI, SAT, NUMBER_OF_DAYS } Days;

@interface MyClassWithAlarms
{
   Bool alarms[NUMBER_OF_DAYS];
}

- (void) setAlarmOnDay:(Days)day;

@end

@implementation MyClassWithAlarms

- (void) setAlarmOnDay:(Days)day
{
   alarms[day] = YES;
}

@end

等。

你可以自由地混合C和目标C。对于一个只有7个booleans的数组来说,使用NSArray是没有意义的,C数组将更快,使用更少的内存。但是,您不会得到边界检查,所以确保索引始终在范围内--如果您只使用Days值,就会出现这种情况。

票数 2
EN

Stack Overflow用户

发布于 2011-02-02 00:39:01

对于当前的日子,您可以使用枚举而不是字符串,然后,您可以使用一个大小为NUM_WEEKDAYS的数组,而不是有一堆工作日变量,这样您的代码就会更像:

Alarms[weekDay] = ON;

更多的细节,因为这相当类似C:首先,枚举将整数与值关联起来。下面是一个示例枚举:

代码语言:javascript
代码运行次数:0
运行
复制
enum Days
{
    MON,
    TUES,
    WEDS,
    THURS,
    FRI,
    SAT,
    SUN,
    NUM_WEEKDAYS
};

因此,数组按顺序保存每个值,而不是拥有:

代码语言:javascript
代码运行次数:0
运行
复制
MonAlarm
TuesAlarm
WedsAlarm
...

你只会有Alarms[NUM_WEEKDAYS]。然后,您可以通过Alarms[MON]访问星期一的警报,就像以前使用mondayAlarm一样。

另一个问题是,您正在通过string访问您的一周中的每一天,这应该避免--字符串操作是SLOOOOOOOOOOOOOOOOOOOOOW。如果可能的话,可以使用枚举。你从哪里拉这根绳子?告诉我一些细节,我会教你如何清理。一旦您达到了点,您的输入是枚举值"MON“,您直接传递它,而不需要一个if。

票数 2
EN

Stack Overflow用户

发布于 2011-02-02 01:33:21

我建议您使用整数或枚举值,而不是处理初始数据结构中的字符串。处理整数(或枚举)比处理字符串更有效。只有在需要显示整数值时才将其转换为字符串。

任何一周内的特定处理都可以在一个开关语句中完成,而不是一个执行字符串比较的if- can语句链。

如果你决定在一个非英语国家使用你的应用程序,这种方法也会使本地化变得更容易。

我建议使用NSDateComponents使用的一周一天的会议。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4869568

复制
相关文章

相似问题

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