-4

重複の可能性:
他の方法でコードをチェックする場合、どうすればこれを書くことができますか?

ここでの条件付きコードは、反復的で長いようです。より良いアプローチはありますか?NSDictionary オブジェクトの文字列値をテストし、値のプレフィックスに応じて、$、£、¥ の通貨記号を使用した UILabel をテストしたいと考えています。

これが私のコードです(以下に2つの例を示しました。より多くの通貨があり、コードは非常に長いです):

  if ([[item objectForKey:@"currency"] isEqualToString:@"EUR"]) {

        NSString *priceConvertToStr = [NSString stringWithFormat:@"€%@", [[item objectForKey:@"price"]stringValue]];

        NSString *priceStringFix = [priceConvertToStr
                                    stringByReplacingOccurrencesOfString:@"(null)" withString:@""];

        priceLabelText.text = priceStringFix;
        [imgView2 addSubview:priceLabelText];

    }

    if ([[item objectForKey:@"currency"] isEqualToString:@"GBP"]) {
        NSString *priceConvertToStr = [NSString stringWithFormat:@"€%@", [[item objectForKey:@"price"]stringValue]];

        NSString *priceStringFix = [priceConvertToStr
                                    stringByReplacingOccurrencesOfString:@"(null)" withString:@""];

        priceLabelText.text = priceStringFix;
        [imgView2 addSubview:priceLabelText];

    }
    if ([[item objectForKey:@"currency"] isEqualToString:@"USD"]) {
        NSString *priceConvertToStr = [NSString stringWithFormat:@"$%@", [[item objectForKey:@"price"]stringValue]];

        NSString *priceStringFix = [priceConvertToStr
                                    stringByReplacingOccurrencesOfString:@"(null)" withString:@""];

        priceLabelText.text = priceStringFix;
        [imgView2 addSubview:priceLabelText];

    }

助けてくれてありがとう。

4

1 に答える 1

3

コードをこれにリファクタリングできます (ifステートメント内のコードの本質的に 80% が同一であるため可能です)。

NSDictionary *currDict = @{
    @"EUR": @"€",
    @"GBP": @"₤",
    @"USD": @"$"
};
NSString *currName = [item objectForKey:@"currency"];
NSString *currency = [currDict objectForKey:currName];

NSString *priceConvertToStr = [NSString stringWithFormat:@"%@%@",
    currency,
    [[item objectForKey:@"price"] stringValue]
];
NSString *priceStringFix = [priceConvertToStr stringByReplacingOccurrencesOfString:@"(null)" withString:@""];
priceLabelText.text = priceStringFix;
[imgView2 addSubview:priceLabelText];
于 2013-02-03T11:34:49.033 に答える