首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >初始化基于卡的iOS应用程序的大静态数组

初始化基于卡的iOS应用程序的大静态数组
EN

Code Review用户
提问于 2017-01-20 15:16:44
回答 2查看 288关注 0票数 -1

我有一个基于卡的iOS应用程序,它使用了相当大的静态卡片数组。每一张卡片都有几个属性,主要是字符串、数字和布尔值。

这个应用程序的第一个版本有3-4个属性。下一个版本大约有7-8个。现在它有10-11了。我计划再增加5-10个属性。

每次迭代时,我必须更改大量代码:

代码语言:javascript
复制
[allCards addObject:[FlashCard flashCardWithVarA:@"ABC" varB:@"DEF" varC:@"GHI"]];

变成:

代码语言:javascript
复制
[allCards addObject:[FlashCard flashCardWithVarA:@"ABC" varB:@"DEF" varC:@"GHI" varD:FALSE varE:FALSE varF:@"JK" varG:FALSE varH:@"123"]];

然后:

代码语言:javascript
复制
[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:]的调用。

有什么建议或想法吗?

EN

回答 2

Code Review用户

发布于 2017-01-30 16:20:57

如果您希望减少对象的属性数量,那么您必须想出一种方法来重构类接口。但鉴于你有一个闪存卡应用程序,我认为这是不可能的,我只是假设你需要所有这些属性

如果您试图避免每次更改接口时重写每条消息所带来的痛苦,您可以不使用旧接口,这是一个由旧接口调用的创建新方法。

示例:

代码语言:javascript
复制
-(instancetype)flashCardWithVarA:(NSString*)a varB:(NSString*)b varC:(NSString*)c
{
  [self flashCardWithVarA:a varB:b varC:c varD:DEFAULTVALUE varN:DEFAULTVALUE];
}

这样你就不用改变你的来电者了

但是,假设基于我对闪存卡工作方式的了解,每当您更改初始化接口时,您都会想要更改每一个闪存卡的创建。

所以,简而言之,你有点像水管:)

我想说的是,如果您发现大多数对象在初始化时都传递相同的值,那么也许可以看看是否有一种方法可以在Flash Card对象的初始化中默认该值,然后显式地强制一个闪存卡重新设置该默认值(如果需要的话)。

票数 1
EN

Code Review用户

发布于 2018-05-08 02:15:55

将所有这些静态数据放入.plist文件中。

现在,您可以将其与源代码分离,并在需要时轻松地将其全部吸收进去。

代码语言:javascript
复制
NSString *path = [NSBundle.mainBundle pathForResource:@"flashCards" ofType:@"plist"]; 
NSArray *flashCardDicts = [NSArray arrayWithContentsOfFile:path]; 

现在,只需遍历该数组并从字典构建所有FlashCard对象即可。

代码语言:javascript
复制
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"]];
    ...
}

甚至更简单。

代码语言:javascript
复制
for (NSDictionary *dict in flashCardDicts) {
    FlashCard *flashCard = [FlashCard flashCardWithDict:dict];
    ...
}
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/153154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档