Используя числа
NSNumber
подкласс NSValue
это предлагает значение как любой скалярный (числовой) тип C. Это определяет ряд методов в частности для создания объектов числа и доступа к значению как со знаком или без знака char
, short int
, int
, NSInteger
, long int
, long long int
, float
, или double
, или как a BOOL
.
NSInteger nine = 9; |
float ten = 10.0; |
NSNumber *nineFromInteger = [NSNumber alloc] initWithInteger:nine]; |
NSNumber *tenFromFloat = [NSNumber numberWithFloat:ten]; |
Можно также создать объект числа непосредственно как использование литералов @
:
NSNumber *nineFromInteger = @9; |
NSNumber *tenFromFloat = @10.0; |
NSNumber *nineteenFromExpression = @(nine + ten); |
NSNumber
определяет a compare:
метод для определения упорядочивания два NSNumber
объекты.:
NSComparisonResult comparison = [nineFromInteger compare:tenFromFloat]; |
// comparison = NSOrderedAscending |
float aFloat = [nineFromInteger floatValue]; |
// aFloat = 9.0 |
BOOL ok = [tenFromFloat boolValue]; |
// ok = YES |
NSNumber
записи объекта числовой тип, с которым это создается и использует правила C для числового преобразования при сравнении NSNumber
объекты различных числовых типов и при возврате значений как C числовые типы. Посмотрите любой стандарт C ссылка для получения информации о преобразовании типов. (Если Вы просите у числа objCType
, однако, возвращенный тип не обязательно соответствует метод, с которым создавался получатель.)
Если Вы спрашиваете NSNumber
объект для его значения с помощью типа, который не может содержать значение, Вы возвращаете ошибочный результат — например, если Вы просите float
ценность числа создана с a double
это больше, чем FLT_MAX
, или integer
ценность числа создана с a float
это больше, чем максимальное значение NSInteger
.
NSNumber *bigNumber = @(FLT_MAX); |
NSInteger badInteger = [bigNumber integerValue]; |
NSLog(@"bigNumber: %@; badInteger: %d", bigNumber, badInteger); |
// output: "bigNumber: 3.402823e+38; badInteger: 0" |