Удалить повторяющиеся коды в NSDictionary Params, используемые для отправки на сервер - PullRequest
0 голосов
/ 09 января 2012

Код ниже показывает, как я готовлю параметры для отправки на сервер.У меня есть предложение if-else, чтобы проверить и определить, какие параметры следует отправлять, т. Е. Если идентификатор вопроса существует, отправьте только идентификатор вопроса, еще отправьте текст вопроса и идентификатор темы.

Однако я чувствую, что это немного повторяетсяи не самая лучшая форма кодирования (по моему POV).Как я могу реорганизовать код, чтобы сделать его более эффективным (удалить дубликаты)

if(self.question._id || [self.question._id isEqual:[NSNull null]])
{
    //Set up params for submission
    NSDictionary *params= [[NSDictionary alloc] initWithObjectsAndKeys:
                          self.answer.text, @"text",
                          //if question id exists, submit question id only 
                          self.question._id, @"question_id", 
                          shareFb, @"fbShare", 
                          shareTwitter, @"twitterShare",
                          self.question.source,@"questionSource",
                          self.answer.videoId,@"youtube_id",
                          nil
                          ];
}
else
{
    //Set up params for submission
    NSDictionary *params= [[NSDictionary alloc] initWithObjectsAndKeys:
                          self.answer.text, @"text", 
                          //else submit question text and topic id
                          self.question.text, @"question_text",
                          self.question.topic._id, @"topic_id", 
                          shareFb, @"fbShare", 
                          shareTwitter, @"twitterShare",
                          self.question.source,@"questionSource",
                          self.answer.videoId,@"youtube_id",
                          nil
                          ];

1 Ответ

1 голос
/ 09 января 2012

Используйте изменяемый словарь, затем вы можете добавить в дополнительные поля

NSMutableDictionary *params= [[NSMutableDictionary alloc] initWithObjectsAndKeys:
        self.answer.text, @"text",
        //if question id exists, submit question id only 
        self.question._id, @"question_id", 
        shareFb, @"fbShare", 
        shareTwitter, @"twitterShare",
        self.question.source,@"questionSource",
        self.answer.videoId,@"youtube_id",
        nil
        ];

if(!(self.question._id == nil || [self.question._id isEqual:[NSNull null]]))
{
    [params setObject:self.question.text forKey:@"question_text"];
    [params setObject:self.question.topic._id forKey:@"topic_id"];
}

РЕДАКТИРОВАТЬ В ОТВЕТ НА КОММЕНТАРИЙ 1

Если какой-либо из параметров, заданных в первом предложении выше, можетбыть ноль, вам нужно быть более осторожным

NSMutableDictionary *params= [[NSMutableDictionary alloc] init];
if (self.answer.text) {
    [params setObject:self.answer.text forKey:@"text"];
}
•
•  // all the params between self.answer.text and self.answer.videoId
•
if (self.answer.videoId) {
    [params setObject:self.answer.videoId forKey:@"youtube_id"];
}
if(!(self.question._id == nil || [self.question._id isEqual:[NSNull null]]))
    {
        if(self.question.text) {
            [params setObject:self.question.text forKey:@"question_text"];
        }
        if (self.question.topic._id) {
            [params setObject:self.question.topic._id forKey:@"topic_id"];
        }
    }
}

Вы не можете установить nil объект на ключ (то есть [params setObject:nil forKey:@"key] потерпит крах)

...