Показаны сообщения с ярлыком NSNumber. Показать все сообщения
Показаны сообщения с ярлыком NSNumber. Показать все сообщения

9 апр. 2014 г.

Класс NSNumber - примеры

Этот класс является одним из самых странных дополнений в языке Objective-C. Для обработки числовых типов достаточно внутренних функций и методов. Единственная, как бы, цель класса NSNumber это обработка объектов NSArray, который хранит в себе только объекты.

Инициализация объекта NSNumber

Суть такова, что основные методы инициализации начинаются одинаково, но отличаются лишь конечным типом числа, т.е. что имеется в виду:

numberWith<Unsigned><Type>

Исходя из этого полное имя метода, для определенного типа числа, выглядит так:

numberWithBool
numberWithChar
numberWithDouble
numberWithFloat
numberWithInt
numberWithInteger
numberWithLong
numberWithLongLong
numberWithShort
numberWithUnsignedChar
numberWithUnsignedInt
numberWithUnsignedInteger
numberWithUnsignedLong
numberWithUnsignedLongLong
numberWithUnsignedShort


Например:

NSNumber *myFloat;
myFloat = [NSNumber numberWithFloat: 10.09];

Возвращение и приведение к другому типу числа из переменной-объекта класса

boolValue
charValue
decimalValue
doubleValue
floatValue
intValue
integerValue
longLongValue
longValue
shortValue
unsignedCharValue
unsignedIntegerValue
unsignedIntValue
unsignedLongLongValue
unsignedLongValue
unsignedShortValue


Например: 

NSNumber *myFloat; 
 
float floatvalue;
myFloat = [NSNumber numberWithDouble: 10.09];
floatvalue = [myFloat floatValue];
NSLog (@"Value = %f", floatvalue);

Сравнение числовых объектов 

Для сравнения значения, хранящихся в объектах необходимо использовать isEqualToNumber метод. isEqualToNumber возвращает логическое значение в зависимости от содержания двух объектов. Например:

NSNumber *myFloat1;
NSNumber *myFloat2;

myFloat1 = [NSNumber numberWithDouble: 10.09];
myFloat2 = [NSNumber numberWithDouble: 10.08];

if ([myFloat1 isEqualToNumber: myFloat2])
        NSLog (@"Numbers are equal");
else
        NSLog (@"Numbers are not equal");

Или просто сравнить эти объекты методом compare:

NSNumber *myFloat1;
NSNumber *myFloat2;

myFloat1 = [NSNumber numberWithDouble: 10.09]; 
myFloat2 = [NSNumber numberWithDouble: 10.08]; 
NSComparisonResult result; 
    
result = [myFloat1 compare: myFloat2];

if (result == NSOrderedSame)
        NSLog(@"Numbers are equal");
else if (result == NSOrderedAscending)
        NSLog(@"Float1 is less than Float2");
else if (result == NSOrderedDescending)
        NSLog(@"Float1 is greater than Float2");

Конвертация числа в строку

NSNumber *myFloat;
NSString *myString;
      
myFloat = [NSNumber numberWithDouble: 10.09];
myString = [myFloat stringValue];
NSLog (@"Number as string is %@", myString);

6 апр. 2014 г.

Определение объема HDD и оставшегося свободного места

Определение объема HDD и оставшегося свободного места

//get startup disk total size
+(NSNumber *)getDiskTotalSize
{
    NSDictionary *attr = [[NSFileManager defaultManager] attributesOfFileSystemForPath:@"/" error:nil];
    
    return [attr objectForKey:NSFileSystemSize];
}

//get startup disk's free size
+(NSNumber *)getDiskAvailableSize
{
    NSDictionary *attr = [[NSFileManager defaultManager] attributesOfFileSystemForPath:@"/" error:nil];
    
    return [attr objectForKey:NSFileSystemFreeSize];
}

20 мар. 2014 г.

Добавление числа в массив / Add number to Array

Обычно в массив типа NSArray или NSMutableArray нельзя добавить простое число или структуру, а только объект. Значит (в нашем примере) преобразуем наше простое число (например int) в объект. Число можно преобразовать как с помощью NSString, так и с помощью NSNumber.

NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:30]; // должен быть мутабельным
 
for (int x = 0; x < 30; x++) {
    // добавить как NSString
    [myArray addObject:[NSString stringWithFormat:@"%d", x]];
 
    // добавить как NSNumber
    [myArray addObject:[NSNumber numberWithInt: x]];
}
 
// результат
NSLog([myArray description]);

Для обоих случаев используемые классы возвращают число как объект.

19 мар. 2014 г.

Как хранить BOOL - переменную как NSNumber

Создать NSNumber - переменную с булевой можно таким способом:

BOOL myBool = YES;
NSNumber *boolNumber = [NSNumber numberWithBool:myBool];
NSLog(@"boolNumber is %@", boolNumber); // выдаст 1 для YES и 0 для NO

Технически это аналог инициализации NSNumber с помощью литералов @1 и @0
И обратная операция с NSNumber в BOOL:

BOOL anotherBool = [NSNumber numberWithBool:YES];
NSLog(@"anotherBool is %i", anotherBool); // выдаст 1 для YES и 0 для NO