Отобразить 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, вы должны каким-то образом преобразовать значение.