Сжать это в функцию? - PullRequest
       3

Сжать это в функцию?

0 голосов
/ 09 сентября 2010

Привет, у меня есть следующий код, который очень длинный, конечно, как я могу сжать это в функцию?Затем вызвать эту функцию с другими буднями и уроками в неделю?В настоящее время я просто использую один и тот же код снова и снова, просто заменяя переменные (которые являются строками).

//Allocate and add objects to monday week one.
    monArrayA = [[NSMutableArray alloc] init];
    [monArrayA addObject:@"Before School"];
    [monArrayA addObject:[NSString stringWithFormat:@"%@", monP1A]];
    [monArrayA addObject:[NSString stringWithFormat:@"%@", monP2A]];
    [monArrayA addObject:@"Break"];
    [monArrayA addObject:[NSString stringWithFormat:@"%@", monP3A]];
    [monArrayA addObject:[NSString stringWithFormat:@"%@", monP4A]];
    [monArrayA addObject:@"Lunch"];
    [monArrayA addObject:[NSString stringWithFormat:@"%@", monP5A]];
    [monArrayA addObject:[NSString stringWithFormat:@"%@", monP6A]];
    [monArrayA addObject:@"After School"];

    //Allocate and add objects to monday week two.
    monArrayB = [[NSMutableArray alloc] init];
    [monArrayB addObject:@"Before School"];
    [monArrayB addObject:[NSString stringWithFormat:@"%@", monP1B]];
    [monArrayB addObject:[NSString stringWithFormat:@"%@", monP2B]];
    [monArrayB addObject:@"Break"];
    [monArrayB addObject:[NSString stringWithFormat:@"%@", monP3B]];
    [monArrayB addObject:[NSString stringWithFormat:@"%@", monP4B]];
    [monArrayB addObject:@"Lunch"];
    [monArrayB addObject:[NSString stringWithFormat:@"%@", monP5B]];
    [monArrayB addObject:[NSString stringWithFormat:@"%@", monP6B]];
    [monArrayB addObject:@"After School"];

    //Allocate and add objects to tuesday week one.
    tueArrayA = [[NSMutableArray alloc] init];
    [tueArrayA addObject:@"Before School"];
    [tueArrayA addObject:[NSString stringWithFormat:@"%@", tueP1A]];
    [tueArrayA addObject:[NSString stringWithFormat:@"%@", tueP2A]];
    [tueArrayA addObject:@"Break"];
    [tueArrayA addObject:[NSString stringWithFormat:@"%@", tueP3A]];
    [tueArrayA addObject:[NSString stringWithFormat:@"%@", tueP4A]];
    [tueArrayA addObject:@"Lunch"];
    [tueArrayA addObject:[NSString stringWithFormat:@"%@", tueP5A]];
    [tueArrayA addObject:[NSString stringWithFormat:@"%@", tueP6A]];
    [tueArrayA addObject:@"After School"];

    //Allocate and add objects to tuesday week two.
    tueArrayB = [[NSMutableArray alloc] init];
    [tueArrayB addObject:@"Before School"];
    [tueArrayB addObject:[NSString stringWithFormat:@"%@", tueP1B]];
    [tueArrayB addObject:[NSString stringWithFormat:@"%@", tueP2B]];
    [tueArrayB addObject:@"Break"];
    [tueArrayB addObject:[NSString stringWithFormat:@"%@", tueP3B]];
    [tueArrayB addObject:[NSString stringWithFormat:@"%@", tueP4B]];
    [tueArrayB addObject:@"Lunch"];
    [tueArrayB addObject:[NSString stringWithFormat:@"%@", tueP5B]];
    [tueArrayB addObject:[NSString stringWithFormat:@"%@", tueP6B]];
    [tueArrayB addObject:@"After School"];

    //Allocate and add objects to wednesday week one.
    wedArrayA = [[NSMutableArray alloc] init];
    [wedArrayA addObject:@"Before School"];
    [wedArrayA addObject:[NSString stringWithFormat:@"%@", wedP1A]];
    [wedArrayA addObject:[NSString stringWithFormat:@"%@", wedP2A]];
    [wedArrayA addObject:@"Break"];
    [wedArrayA addObject:[NSString stringWithFormat:@"%@", wedP3A]];
    [wedArrayA addObject:[NSString stringWithFormat:@"%@", wedP4A]];
    [wedArrayA addObject:@"Lunch"];
    [wedArrayA addObject:[NSString stringWithFormat:@"%@", wedP5A]];
    [wedArrayA addObject:[NSString stringWithFormat:@"%@", wedP6A]];
    [wedArrayA addObject:@"After School"];

    //Allocate and add objects to wednesday week two.
    wedArrayB = [[NSMutableArray alloc] init];
    [wedArrayB addObject:@"Before School"];
    [wedArrayB addObject:[NSString stringWithFormat:@"%@", wedP1B]];
    [wedArrayB addObject:[NSString stringWithFormat:@"%@", wedP2B]];
    [wedArrayB addObject:@"Break"];
    [wedArrayB addObject:[NSString stringWithFormat:@"%@", wedP3B]];
    [wedArrayB addObject:[NSString stringWithFormat:@"%@", wedP4B]];
    [wedArrayB addObject:@"Lunch"];
    [wedArrayB addObject:[NSString stringWithFormat:@"%@", wedP5B]];
    [wedArrayB addObject:[NSString stringWithFormat:@"%@", wedP6B]];
    [wedArrayB addObject:@"After School"];

    //Allocate and add objects to thursday week one.
    thuArrayA = [[NSMutableArray alloc] init];
    [thuArrayA addObject:@"Before School"];
    [thuArrayA addObject:[NSString stringWithFormat:@"%@", thuP1A]];
    [thuArrayA addObject:[NSString stringWithFormat:@"%@", thuP2A]];
    [thuArrayA addObject:@"Break"];
    [thuArrayA addObject:[NSString stringWithFormat:@"%@", thuP3A]];
    [thuArrayA addObject:[NSString stringWithFormat:@"%@", thuP4A]];
    [thuArrayA addObject:@"Lunch"];
    [thuArrayA addObject:[NSString stringWithFormat:@"%@", thuP5A]];
    [thuArrayA addObject:[NSString stringWithFormat:@"%@", thuP6A]];
    [thuArrayA addObject:@"After School"];

    //Allocate and add objects to thursday week two.
    thuArrayB = [[NSMutableArray alloc] init];
    [thuArrayB addObject:@"Before School"];
    [thuArrayB addObject:[NSString stringWithFormat:@"%@", thuP1B]];
    [thuArrayB addObject:[NSString stringWithFormat:@"%@", thuP2B]];
    [thuArrayB addObject:@"Break"];
    [thuArrayB addObject:[NSString stringWithFormat:@"%@", thuP3B]];
    [thuArrayB addObject:[NSString stringWithFormat:@"%@", thuP4B]];
    [thuArrayB addObject:@"Lunch"];
    [thuArrayB addObject:[NSString stringWithFormat:@"%@", thuP5B]];
    [thuArrayB addObject:[NSString stringWithFormat:@"%@", thuP6B]];
    [thuArrayB addObject:@"After School"];

    //Allocate and add objects to friday week one.
    friArrayA = [[NSMutableArray alloc] init];
    [friArrayA addObject:@"Before School"];
    [friArrayA addObject:[NSString stringWithFormat:@"%@", friP1A]];
    [friArrayA addObject:[NSString stringWithFormat:@"%@", friP2A]];
    [friArrayA addObject:@"Break"];
    [friArrayA addObject:[NSString stringWithFormat:@"%@", friP3A]];
    [friArrayA addObject:[NSString stringWithFormat:@"%@", friP4A]];
    [friArrayA addObject:@"Lunch"];
    [friArrayA addObject:[NSString stringWithFormat:@"%@", friP5A]];
    [friArrayA addObject:[NSString stringWithFormat:@"%@", friP6A]];
    [friArrayA addObject:@"After School"];

    //Allocate and add objects to friday week two.
    friArrayB = [[NSMutableArray alloc] init];
    [friArrayB addObject:@"Before School"];
    [friArrayB addObject:[NSString stringWithFormat:@"%@", friP1B]];
    [friArrayB addObject:[NSString stringWithFormat:@"%@", friP2B]];
    [friArrayB addObject:@"Break"];
    [friArrayB addObject:[NSString stringWithFormat:@"%@", friP3B]];
    [friArrayB addObject:[NSString stringWithFormat:@"%@", friP4B]];
    [friArrayB addObject:@"Lunch"];
    [friArrayB addObject:[NSString stringWithFormat:@"%@", friP5B]];
    [friArrayB addObject:[NSString stringWithFormat:@"%@", friP6B]];
    [friArrayB addObject:@"After School"];

Ответы [ 3 ]

2 голосов
/ 09 сентября 2010

Попробуйте это:

NSMutableArray* helper(id a, id b, id c, id d, id e, id f) {
    NSMutableArray* arr = [[NSMutableArray alloc] init];
    [arr addObject:@"Before School"];
    [arr addObject:[NSString stringWithFormat:@"%@", a]];
    [arr addObject:[NSString stringWithFormat:@"%@", b]];
    [arr addObject:@"Break"];
    [arr addObject:[NSString stringWithFormat:@"%@", c]];
    [arr addObject:[NSString stringWithFormat:@"%@", d]];
    [arr addObject:@"Lunch"];
    [arr addObject:[NSString stringWithFormat:@"%@", e]];
    [arr addObject:[NSString stringWithFormat:@"%@", f]];
    [arr addObject:@"After School"];
    return arr;
}

...

monArrayA = helper(monP1A, monP2A, monP3A, monP4A, monP5A, monP6A);
monArrayB = helper(monP1B, monP2B, monP3B, monP4B, monP5B, monP6B);

tueArrayA = helper(tueP1A, ...);
tueArrayB = helper(monP1B, ...);

...

Вероятно, вы могли бы сжать его еще больше, если бы ваши объекты были в массивах вместо совокупности дискретных переменных.

2 голосов
/ 09 сентября 2010

Этот тип структурированных данных часто проще создавать и поддерживать во внешнем текстовом или XML-файле, например, в виде списка. Вот метод, который будет считывать всю информацию о плане урока в NSDictionary, который содержит вложенные словари и массивы:

- (NSDictionary *)lessonPlanDictionary
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"LessonPlans" ofType:@"plist"];
    NSDictionary *lessonPlanDict = [NSDictionary dictionaryWithContentsOfFile:path];

    NSLog(@"%@", lessonPlanDict);

    return lessonPlanDict;
}

Файл plist может выглядеть примерно так (если вы хотите использовать текстовый формат plist; в противном случае вы можете использовать формат XML plist):

{
    "Monday" = {
        "Before School" = (
            "Lesson 1",
            "Lesson 2"
        );
        "Break" = (
            "Lesson 3",
            "Lesson 4"
        );
        "Lunch" = (
            "Lesson 5",
            "Lesson 6"
        );
        "After School" = (
        );
    };
    "Tuesday" = {
        "Before School" = (
            "Lesson 1",
            "Lesson 2"
        );
        "Break" = (
            "Lesson 3",
            "Lesson 4"
        );
        "Lunch" = (
            "Lesson 5",
            "Lesson 6"
        );
        "After School" = (
        );
    };
    "Wednesday" = {
        "Before School" = (
            "Lesson 1",
            "Lesson 2"
        );
        "Break" = (
            "Lesson 3",
            "Lesson 4"
        );
        "Lunch" = (
            "Lesson 5",
            "Lesson 6"
        );
        "After School" = (
        );
    };
    "Thursday" = {
        "Before School" = (
            "Lesson 1",
            "Lesson 2"
        );
        "Break" = (
            "Lesson 3",
            "Lesson 4"
        );
        "Lunch" = (
            "Lesson 5",
            "Lesson 6"
        );
        "After School" = (
        );
    };
    "Friday" = {
        "Before School" = (
            "Lesson 1",
            "Lesson 2"
        );
        "Break" = (
            "Lesson 3",
            "Lesson 4"
        );
        "Lunch" = (
            "Lesson 5",
            "Lesson 6"
        );
        "After School" = (
        );
    };
}

Вы даже можете использовать элегантный графический редактор списков Xcode для создания и изменения списков при необходимости. Если вам нужно изменить строки плана урока. Однако я до сих пор не уверен, как ваше приложение использует эти данные, поэтому я не уверен, что структура plist лучше всего соответствует тому, что должно делать ваше приложение.

EDIT

Поскольку подход Марсело, по-видимому, в большей степени соответствовал тому, что вы искали, позвольте мне предложить несколько более упорядоченную реализацию его решения:

NSMutableArray *lessonPlans(NSString *lesson1, NSString *lesson2,
                            NSString *lesson3, NSString *lesson4,
                            NSString *lesson5, NSString *lesson6)
{
    return [NSMutableArray arrayWithObjects:
            @"Before School", lesson1, lesson2,
            @"Break",         lesson3, lesson4,
            @"Lunch",         lesson5, lesson6,
            @"After School",
            nil];
}
0 голосов
/ 09 сентября 2010

Как указано выше, я не знаю, чего вы пытаетесь достичь.Этот код просто переработан, чтобы минимизировать дублирование, без реального понимания вашего проблемного пространства.

-(NSMutableArray *) arrayWithSchedule:(NSArray *) schedule
{
    NSMutableArray *toReturn = [[NSMutableArray alloc] init];
    [toReturn addObject:@"Before School"];
    [toReturn addObject:[NSString stringWithFormat:@"%@", [schedule objectAtIndex:0]]];
    [toReturn addObject:[NSString stringWithFormat:@"%@", [schedule objectAtIndex:1]]];
    [toReturn addObject:@"Break"];
    [toReturn addObject:[NSString stringWithFormat:@"%@", [schedule objectAtIndex:2]]];
    [toReturn addObject:[NSString stringWithFormat:@"%@", [schedule objectAtIndex:3]]];
    [toReturn addObject:@"Lunch"];
    [toReturn addObject:[NSString stringWithFormat:@"%@", [schedule objectAtIndex:4]]];
    [toReturn addObject:[NSString stringWithFormat:@"%@", [schedule objectAtIndex:5]]];
    [toReturn addObject:@"After School"];

    return toReturn;
}

monArrayA = [self arrayWithSchedule:[NSArray arrayWithObjects:monP1A, monP2A, monP3A, monP4A, monP5A, monP6A, nil]];
monArrayB = [self arrayWithSchedule:[NSArray arrayWithObjects:monP1B, monP2B, monP3B, monP4B, monP5B, monP6B, nil]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...