0

所以我有这个代码来改变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];
}

一切正常,但我担心这里的代码质量。

这段代码相当长。有没有办法以某种方式优化它?谢谢!

4

4 回答 4

3

使用 for 循环:

- (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 个案例。

于 2013-04-03T12:59:32.063 回答
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]);];
}
于 2013-04-03T13:06:56.337 回答
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];
}
于 2013-04-03T13:31:55.850 回答
0

首先,您可能会考虑更改 UISlider 以使最小值和最大值与您想要的输出相匹配——即 min==0,max=99。如果您想在代码中执行此操作,则这些将是 minimumValue 和 maximumValue 属性;如果您使用的是 Interface Builder,则这些将是 Attributes Inspector 中的 Minimum 和 Maximum 字段。

那么输出值的计算将是:

int value = slider.value;
    value = (value + 10) - value % 10;
于 2013-04-03T13:17:20.370 回答