2016-07-28 3 views
-1

Как конвертировать объект типа NSObject в NSNumber в Objective-C?Преобразование NSObject в NSNumber

В Android я это сделать:

if(value instanceof Integer){ 
    intValue = (Integer)value; 
} 

Но как я могу преобразовать значение в Objective-C?

Мой код:.

-(void)changeWithValue:(NSObject*)value{ 
    if([value isKindOfClass:[NSNumber class]]) 
      float floatValue = [value floatValue]; 
} 

Но он не работает :(

Помогите мне пожалуйста спасибо

+0

Показать код что вы попробовали. –

+0

В Obj-c «Integer» не является объектом, будьте осторожны с этим. intValue в NSNumber, например, вернет целое число, а не NSNumber – Bienemann

+0

. Вы понимаете, что второй метод не будет иметь никакого эффекта, поскольку он присваивает значение локальной переменной, которая исчезает при возврате метода. Это то, что вы подразумеваете под «не работает»? – Droppy

ответ

3

После уточнения какая ваша ошибка была решением Objective-C-ese для использования id в качестве типа параметра. Тип id означает «любой тип объекта», и компилятор позволяет вам вызвать любой метод. Таким образом, вы бы код вдоль линий:

- (void)changeWithValue:(id)value 
{ 
    if([value isKindOfClass:[NSNumber class]]) 
    { 
     float floatValue = [value floatValue]; 
     ... 
    } 
    else 
    { 
     // handle not an `NSNumber` 
    } 
} 

Вы можете сделать его более общим для тестирования метода, а не типа с помощью respondsToSelector::

- (void)changeWithValue:(id)value 
{ 
    if([value respondsToSelector:@selector(floatValue)]) 
    { 
     float floatValue = [value floatValue]; 
     ... 
    } 
    else 
    { 
     // handle case where value does not support floatValue 
    } 
} 

НТН

+0

Спасибо за ваш ответ и за объяснение :) – Katya

1

Вы попробуйте это

-(void)changeWithValue:(NSObject*)value{ 
if([value isKindOfClass:[NSNumber class]]) 
     NSNumber *num = (NSNumber*)value; 
     float floatValue = [num floatValue]; 
} 
+0

Большое спасибо :) – Katya

+1

Как это отличается от кода, предоставленного OP? Приведение к 'NSNumber' не будет иметь никакого значения. – Droppy

+0

Droppy, я вас не понимаю – Katya

Смежные вопросы