所以我有这段代码根据UILabel
的值更改UISlider
的值:
- (void)slider03Changed:(UISlider *)slider{
int value = 10;
if (slider.value >= 0.1){
value = 20;
}
if (slider.value >= 0.2){
value = 30;
}
if (slider.value >= 0.3){
value = 40;
}
if (slider.value >= 0.4){
value = 50;
}
if (slider.value >= 0.5){
value = 60;
}
if (slider.value >= 0.6){
value = 70;
}
if (slider.value >= 0.7){
value = 80;
}
if (slider.value >= 0.8){
value = 90;
}
if (slider.value >= 0.9){
value = 100;
}
lbl01.text = [NSString stringWithFormat:@"%u hours", value];
}
一切正常,但我担心这里的代码质量。
这段代码很长很好。有什么方法可以以某种方式优化它吗?谢谢!
答案 0 :(得分:3)
用于循环:
- (void)slider03Changed:(UISlider *)slider{
int value = 10;
for (float i = 0.9; i > 0; i-=0.1)
{
if (slider.value >= i)
{
value = (i*100)+10;
break;
}
}
lbl01.text = [NSString stringWithFormat:@"%u hours", value];
}
使用的公式是:
(i*100)+10
例如:
(0.6*100)+10 = 70
(0.7*100)+10 = 80
and so on...
更新:
您可以先开始检查此案例slider.value >= 0.9
,然后再进行优化。
为什么?
因为如果它满足具有更高值的情况,那么你的if
语句的其余部分将是无用的。在我编写的代码中,每当满足slider.value
值最大的条件时,我们设置value
变量的值并跳出循环。这将阻止您的代码评估不必要的案例。
例如:
假设您的slider.value
= 0.95
这将在您的代码中发生:
(slider.value >= 0.1) ----> true ----> then ---> set value = 20
(slider.value >= 0.2) ----> true ----> then ---> set value = 30
(slider.value >= 0.3) ----> true ----> then ---> set value = 40
(slider.value >= 0.4) ----> true ----> then ---> set value = 50
(slider.value >= 0.5) ----> true ----> then ---> set value = 60
(slider.value >= 0.6) ----> true ----> then ---> set value = 70
(slider.value >= 0.7) ----> true ----> then ---> set value = 80
(slider.value >= 0.8) ----> true ----> then ---> set value = 90
(slider.value >= 0.9) ----> true ----> then ---> set value = 100
用我的代码:
(slider.value >= 0.9) ----> true ----> then ---> set value = 100 and break out of the loop
正如您所看到的,使用我的代码,它只评估1个案例。
答案 1 :(得分:1)
每当您需要许多if
并且您知道只有一个将被执行时,请使用if-else ladder
。
在这种情况下,你可以使用:( 这不是最好的方式)
if (slider.value >= 0.9){
value = 100;
}
else if (slider.value >= 0.8){
value = 90;
}
else ....
现在要自动化/制作更短的代码,您可以使用:
- (void)slider03Changed:(UISlider *)slider{
lbl01.text = [NSString stringWithFormat:@"%.0f hours", round(value*10-.5)*10+10]);];
}
答案 2 :(得分:1)
一旦尝试这样,我想这里不需要每次都使用循环,
- (void)slider03Changed:(UISlider *)slider{
float value = slider.value;
int k=((int)(value*10)*10)+10;
if(k==110){
k=100;
}
lbl01.text = [NSString stringWithFormat:@"%d hours", value];
}
答案 3 :(得分:0)
首先,您可以考虑更改UISlider,使最小值和最大值与您想要的输出相匹配 - 即min == 0,max = 99。如果您想在代码中执行此操作,或者如果您正在使用Interface Builder,则可以使用Attributes Inspector中的Minimum和Maximum字段。
然后输出值的计算将是:
int value = slider.value;
value = (value + 10) - value % 10;