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

ループに使用:

- (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の が必要で、実行されるのが 1 つだけであることがわかっている場合は、 を使用します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 に答える
0

最初に、最小値と最大値が必要な出力に一致するように UISlider を変更することを検討してください (つまり、min==0、max=99)。これらは、コードで実行する場合は minimumValue および maximumValue プロパティになり、Interface Builder を使用している場合は属性インスペクターの Minimum および Maximum フィールドになります。

出力値の計算は次のようになります。

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