Objective c 删除用于提交到服务器的NSDictionary参数中的重复代码
下面的代码显示了我准备提交给服务器的参数的方式。我有一个if-else子句来检查和确定要提交的参数,即如果问题id存在,只提交问题id,否则提交问题文本和主题id 然而,我觉得这有点重复,不是最好的编码形式(在我的观点中)。如何重构代码以提高效率(删除重复代码)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
使用可变字典,然后可以添加额外的字段
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"];
}
}
}