Objective c 删除用于提交到服务器的NSDictionary参数中的重复代码

Objective c 删除用于提交到服务器的NSDictionary参数中的重复代码,objective-c,ios,duplicates,params,Objective C,Ios,Duplicates,Params,下面的代码显示了我准备提交给服务器的参数的方式。我有一个if-else子句来检查和确定要提交的参数,即如果问题id存在,只提交问题id,否则提交问题文本和主题id 然而,我觉得这有点重复,不是最好的编码形式(在我的观点中)。如何重构代码以提高效率(删除重复代码) 使用可变字典,然后可以添加额外的字段 NSMutableDictionary *params= [[NSMutableDictionary alloc] initWithObjectsAndKeys: self.answ

下面的代码显示了我准备提交给服务器的参数的方式。我有一个if-else子句来检查和确定要提交的参数,即如果问题id存在,只提交问题id,否则提交问题文本和主题id

然而,我觉得这有点重复,不是最好的编码形式(在我的观点中)。如何重构代码以提高效率(删除重复代码)


使用可变字典,然后可以添加额外的字段

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进行编辑

如果在上面的第一条语句中设置的任何参数都可能为nil,则需要更加小心

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对象设置为key(即
[params setObject:nil forKey:@“key]
将崩溃)

向服务器提交“null”或“nil”对象可以吗?我的印象是,在“null”或“nil”之后的所有内容都不会被考虑提交。例如,在我的示例中,如果问题id为nil/null,则所有后续参数,如shareFb、shareTwitter、youtube_id都将被切断。@Zhen是的,第一个nil对象将用obje终止初始化ctsAndKeys方法。我编辑该方法是为了向您展示如何获取每个非nil的参数。如果您是从JSON填充这些值,您可能需要扩展If语句以检查isEqual:[NSNull null]你在原始问题中表现如何好的,那么你是说我需要先做一个检查,然后再在我的案例中设置参数。明白了。谢谢!
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"];
        }
    }
}