2014-09-25 4 views
3

С NSNumber, являющимся классом, я пытаюсь преобразовать его в NSInteger для выполнения некоторых вычислений. В NSLog это показывает, что я конвертирую и выполняю умножение правильно. Однако, когда мне пришлось возвращать удвоитель в качестве обычного NSInteger, я получаю: «Неявное преобразование« NSInteger »(« длинное ») в« NSNumber * »запрещено ARC». Где я ошибаюсь и что мне делать, чтобы сделать это правильно?Как вернуть NSNumber, преобразованный в NSInteger

- (NSNumber *) numberThatIsTwiceAsBigAsNumber:(NSNumber *)number { 

NSInteger doubler = [number integerValue] * 2; 
NSLog(@"%ld", (long)doubler); 

return doubler; 
} 

EDIT: Для тех, кому интересно, это то, как я ее решил:

NSInteger unboxing = [number integerValue] * 2; 
NSNumber *boxing = [NSNumber numberWithInteger:unboxing]; 

return boxing; 
+2

return '@ (doubler);'. – rmaddy

+0

Или старомодный способ, '[NSNumber numberWithInteger: doubler]'. –

ответ

3

Вам необходимо вернуть номер NSNumber, а не NSInteger. Итак, перед возвратом преобразуйте NSInteger в NSNumber.

return @(doubler); 
+0

Так что, по сути, я распаковываю NSNumber для выполнения своих вычислений, и мне просто нужно было его переустановить. Спасибо за вашу помощь :) – Jon

+0

@JonJungemann Да, вы правы, потому что с - (NSNumber *) вы говорите, что вы вернете этот тип. Кроме того, вы можете использовать ярлык для возврата NSNumber с помощью: return @ (doubleler) –

1

Изменить тип возврата к

- (NSInteger) 

Если вы намерены продолжать использовать его в качестве такового, или явно бросить его.

+0

Почему указатель? 'NSInteger' является примитивным типом. – rmaddy

+0

@rmaddy sorry copy & paste –

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