我有一个基于卡的iOS应用程序,它使用了相当大的静态卡片数组。每一张卡片都有几个属性,主要是字符串、数字和布尔值。
这个应用程序的第一个版本有3-4个属性。下一个版本大约有7-8个。现在它有10-11了。我计划再增加5-10个属性。
每次迭代时,我必须更改大量代码:
[allCards addObject:[FlashCard flashCardWithVarA:@"ABC" varB:@"DEF" varC:@"GHI"]];变成:
[allCards addObject:[FlashCard flashCardWithVarA:@"ABC" varB:@"DEF" varC:@"GHI" varD:FALSE varE:FALSE varF:@"JK" varG:FALSE varH:@"123"]];然后:
[allCards addObject:[FlashCard flashCardWithVarA:@"ABC" varB:@"DEF" varC:@"GHI" varD:FALSE varE:FALSE varF:@"JK" varG:FALSE varH:@"123" varJ:@"4567" varK:@"890" varL:@"LMN" varM:@"OPQ" varN:@"RST" varO:@"U"]];我还必须将新属性添加到FlashCard对象中。我必须更改初始值,等等。
每次我这么做,我都会想,一定有更好的方法。特别是因为我必须修改200个对[allCards addObject:]的调用。
有什么建议或想法吗?
发布于 2017-01-30 16:20:57
如果您希望减少对象的属性数量,那么您必须想出一种方法来重构类接口。但鉴于你有一个闪存卡应用程序,我认为这是不可能的,我只是假设你需要所有这些属性
如果您试图避免每次更改接口时重写每条消息所带来的痛苦,您可以不使用旧接口,这是一个由旧接口调用的创建新方法。
示例:
-(instancetype)flashCardWithVarA:(NSString*)a varB:(NSString*)b varC:(NSString*)c
{
[self flashCardWithVarA:a varB:b varC:c varD:DEFAULTVALUE varN:DEFAULTVALUE];
}这样你就不用改变你的来电者了
但是,假设基于我对闪存卡工作方式的了解,每当您更改初始化接口时,您都会想要更改每一个闪存卡的创建。
所以,简而言之,你有点像水管:)
我想说的是,如果您发现大多数对象在初始化时都传递相同的值,那么也许可以看看是否有一种方法可以在Flash Card对象的初始化中默认该值,然后显式地强制一个闪存卡重新设置该默认值(如果需要的话)。
发布于 2018-05-08 02:15:55
将所有这些静态数据放入.plist文件中。
现在,您可以将其与源代码分离,并在需要时轻松地将其全部吸收进去。
NSString *path = [NSBundle.mainBundle pathForResource:@"flashCards" ofType:@"plist"];
NSArray *flashCardDicts = [NSArray arrayWithContentsOfFile:path]; 现在,只需遍历该数组并从字典构建所有FlashCard对象即可。
for (NSDictionary *dict in flashCardDicts) {
FlashCard *flashCard = [FlashCard flashCardWithVarA:dict[@"A"]
varB:dict[@"B"]
varC:dict[@"C"]
varD:[dict[@"D"] boolValue]
varE:[dict[@"E"] boolValue]
varF:dict[@"F"]
varG:[dict[@"G"] boolValue]
varH:dict[@"H"]];
...
}甚至更简单。
for (NSDictionary *dict in flashCardDicts) {
FlashCard *flashCard = [FlashCard flashCardWithDict:dict];
...
}https://codereview.stackexchange.com/questions/153154
复制相似问题