Создание категории NSInteger

При попытке создать категорию для NSInteger компилятор жалуется, что «Не удается найти объявление интерфейса для NSInteger». Разве нельзя создать категорию NSInteger?

Простой тест покажет ошибку компилятора:

#import <Foundation/Foundation.h>

@interface NSInteger (NSInteger_Extensions)

-(NSInteger)simpleTest;

@end



#import "NSInteger_Extensions.h"

@implementation NSInteger (NSInteger_Extensions)

-(NSInteger)simpleTest {
    return self + 5;
}

@end

Должно ли это быть возможно?

Спасибо!


person Hooligancat    schedule 15.03.2011    source источник


Ответы (2)


NSinteger не является интерфейсом. Так что это невозможно.

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html

Из ссылки выше:

Used to describe an integer.

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif

PS: Но вы можете создать категорию NSNumber. Я думаю, это то, что ты хочешь сделать

person Andrew    schedule 15.03.2011
comment
Дох! Спасибо. Какой я дурак. - person Hooligancat; 16.03.2011
comment
Ах... вот это хорошая мысль. Я буквально собирался написать функцию, которая берет мой int, работает и возвращает его, но категория NSNumber на самом деле немного полезнее для меня. Спасибо! - person Hooligancat; 16.03.2011
comment
Вероятно, вы действительно не хотите добавлять методы в NSNumber. Если вы действительно думаете, что знаете, убедитесь, что вы добавили к ним что-то уникальное; -hooli_myMagicMethod. - person bbum; 16.03.2011

NSInteger — это просто typedef для int, примитивного типа. Поскольку это не объект, вы не сможете добавить к нему категорию.

Вместо этого вы можете добавить это к NSNumber или NSValue.

person FreeAsInBeer    schedule 15.03.2011
comment
Повторяю свое заявление Эндрю.. Дох! - person Hooligancat; 16.03.2011