Отобразить NSDecimalNumber в UILabel ячейки

Я пытаюсь отобразить NSDecimalNumber в UILabel на моей ячейке TableView (я получаю цену от BuyProductVariant). Я не могу понять код правильно. Предупреждение, которое я получаю:

Msgstr "Несовместимые типы указателей, назначаемые NSString из NSDecimalNumber".

Я предполагаю, что это просто означает, что я не могу назначить NSDecimalNumber потому что это должна быть строка. Так что я меняю его на NSString вместо этого, и я все еще получаю предупреждение. Как должен выглядеть приведенный ниже код?

.час

@property (nonatomic, readonly, strong) NSDecimalNumber *price;

.m

BUYProductVariant *productPrice = price[indexPath.row];
cell.priceLabel.text = productPrice.price;

2 ответа

Решение

Самый простой способ - попросить его description:

cell.priceLabel.text = productPrice.price.description;

(Все те ответы, которые предлагают форматирование с "%@" используют description косвенно.)

Но если это цена, вы, вероятно, хотите отформатировать ее как цену. Например, в США цены в долларах США обычно форматируются с двумя цифрами справа от десятичной точки и запятой перед каждой группой из трех цифр слева от десятичной точки. Так что вместо использования description, вы должны добавить NSNumberFormatter к вашему контроллеру и используйте это:

.m

@interface ViewController ()
@property (nonatomic, strong) NSNumberFormatter *priceFormatter;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.priceFormatter = [[NSNumberFormatter alloc] init];
    self.priceFormatter.numberStyle = NSNumberFormatterCurrencyStyle;
    // If you don't want a currency symbol like $ in the output, do this:
    // self.priceFormatter.currencySymbol = nil;
}

- (void)showPrice:(NSDecimalNumber *)price inTextField:(UILabel *)label {
    label.text = [self.priceFormatter stringFromNumber:price];
}

Есть много других NSNumberFormatter свойства, которые вы можете использовать для настройки вывода, поэтому проверьте ссылку на класс, если вам нужно.

ОБНОВИТЬ

Если предположить, price объявлен как NSArray:

BUYProductVariant *productPrice = price[indexPath.row];
cell.priceLabel.test = [self.formatter stringWithNumber:productPrice.price];

UILabel ожидает, что его текстовое значение будет NSString, поэтому вам нужно создать строку, используя значение product.price.

cell.priceLabel.text = [NSString stringWithFormat:@"%@", product.price];

Важно то, что вы не можете просто привести (изменить) тип NSDecimalNumber, вы должны каким-то образом преобразовать значение.

Другие вопросы по тегам