在我的应用程序中,它可以在不同的地方发现每周的一天,并执行不同的任务。例如:
if ([weekDayString isEqualToString:@"Monday"]) {
mondayAlarm = @"ON";
}
else if ([weekDayString isEqualToString:@"Tuesday"]) {
tuesdayAlarm = @"ON";
}
等。
在我的代码中的不同地方,它用不同的输出执行相同的7 if语句集。因此,我有两个问题,如何减少重复。
非常感激的帮助。
谢谢。
发布于 2011-02-01 19:26:24
以下是Yakuru提出的关于更多细节的要求:
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
值,就会出现这种情况。
发布于 2011-02-01 16:39:01
对于当前的日子,您可以使用枚举而不是字符串,然后,您可以使用一个大小为NUM_WEEKDAYS的数组,而不是有一堆工作日变量,这样您的代码就会更像:
Alarms[weekDay] = ON;
更多的细节,因为这相当类似C:首先,枚举将整数与值关联起来。下面是一个示例枚举:
enum Days
{
MON,
TUES,
WEDS,
THURS,
FRI,
SAT,
SUN,
NUM_WEEKDAYS
};
因此,数组按顺序保存每个值,而不是拥有:
MonAlarm
TuesAlarm
WedsAlarm
...
你只会有Alarms[NUM_WEEKDAYS]
。然后,您可以通过Alarms[MON]
访问星期一的警报,就像以前使用mondayAlarm
一样。
另一个问题是,您正在通过string访问您的一周中的每一天,这应该避免--字符串操作是SLOOOOOOOOOOOOOOOOOOOOOW。如果可能的话,可以使用枚举。你从哪里拉这根绳子?告诉我一些细节,我会教你如何清理。一旦您达到了点,您的输入是枚举值"MON“,您直接传递它,而不需要一个if。
发布于 2011-02-01 17:33:21
我建议您使用整数或枚举值,而不是处理初始数据结构中的字符串。处理整数(或枚举)比处理字符串更有效。只有在需要显示整数值时才将其转换为字符串。
任何一周内的特定处理都可以在一个开关语句中完成,而不是一个执行字符串比较的if- can语句链。
如果你决定在一个非英语国家使用你的应用程序,这种方法也会使本地化变得更容易。
我建议使用NSDateComponents使用的一周一天的会议。
https://stackoverflow.com/questions/4869568
复制