我只是写了这段简单的代码:
-(void)goToStep:(int)step{
self.step1.hidden = YES;
self.step2.hidden = YES;
self.step3.hidden = YES;
self.step4.hidden = YES;
if(step == 1)
self.step1.hidden = NO;
if(step == 2)
self.step2.hidden = NO;
if(step == 3)
self.step3.hidden = NO;
if(step == 4)
self.step4.hidden = NO;
}
现在正在考虑写作是什么样的差异,而不是表现或性能。
-(void)goToStep:(int)step{
if(step == 1){
self.step1.hidden = NO;
self.step2.hidden = YES;
self.step3.hidden = YES;
self.step4.hidden = YES;
}
if(step == 2){
self.step2.hidden = NO;
self.step1.hidden = YES;
self.step3.hidden = YES;
self.step4.hidden = YES;}
if(step == 3){
self.step3.hidden = NO;
self.step2.hidden = YES;
self.step1.hidden = YES;
self.step4.hidden = YES;}
if(step == 4){
self.step4.hidden = NO;
self.step2.hidden = YES;
self.step3.hidden = YES;
self.step1.hidden = YES;}
}
交替进行切换,会有什么不同吗?
哪种方式更好?感谢
答案 0 :(得分:3)
他们都不是。你想要做的是完全覆盖每个案例。因此:
self.step1.hidden = (step != 1);
self.step2.hidden = (step != 2);
// ...
当然,如果你有一个插座集合或其他数组会更好,你可以直接将step
转换为索引值来访问所需的对象。
答案 1 :(得分:2)
第二个变种是有缺陷的,它不会做第一个变种。
最好的方法是最可读的(如果它不需要冗余逻辑,那就更好了。)
我建议:
-(void)goToStep:(int)step {
self.step1.hidden = step != 1;
self.step2.hidden = step != 2;
self.step3.hidden = step != 3;
self.step4.hidden = step != 4;
}
或迭代一个集合:
NSArray *buttons = @[self.step1, self.step2, self.step3, self.step4];
[buttons enumerateObjectsUsingBlock:^(UIButton *button, NSUInteger idx, BOOL *stop) {
button.hidden = idx != (step - 1);
}];
或者在数字作为键的字典上......有很多方法。 :)
答案 2 :(得分:0)
没有if - else
// assuming that all steps are hidden by default
NSArray *steps = @[step1, step2, step3, step4];
int currentStep = 0;
step1.hidden = NO;
- (void)goToStep:(int)step{
step--; // adjust zero-based index
if (currentStep != step) {
steps[currentStep].hidden = YES;
steps[step].hidden = NO;
currentStep = step;
}
}
答案 3 :(得分:0)
您的第一个示例和第二个示例表现不同。在第二个示例中,当函数完成时,步骤2,3和1将始终设置为hidden = YES,因为最后三个语句位于if块之外,因此将始终执行。
我通常处理这种情况的方法是将所有4个视图放在一个数组中(比方说我们称之为'self.steps')。然后你的功能变为:
-(void)goToStep:(int)step {
for(UIView *stepView in self.steps) {
[stepView setHidden:YES];
}
[[self.steps objectAtIndex:step] setHidden:NO];
}