Используя числа
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" |