我在
objective-c中读过很多关于枚举类型的东西,我看到有很多方法可以定义它们.但是我没有看到正确的方法(如果有的话)来定义可以使用CARS.ROLLSROYCE调用的枚举,并且不能仅在代码中使用ROLLSROYCE.
所以我可以在CARS枚举中以及BEAUTIFULCARS枚举中定义ROLLSROYCE.
你知道定义这样一个枚举的方法吗?
解决方法
您正尝试在Objective-C中为您的Enums实现名称空间.你要求的是Objective-C中的大量肘部油脂.你可能最好使用C来实现这一点,因为它在任何iOS或
Cocoa应用程序中都很容易和完全支持.您必须将#import C代码的文件重命名为.mm文件而不是.m文件,而C编译器可能比Objective-C文件更难.走这条路,你将创建一个像Enums.h这样的头文件.
// Enums.h namespace CARS { enum CARS { ROLLSROYCE }; } namespace BEAUTIFULCARS { enum BEAUTIFULCARS { ROLLSROYCE = 45 }; }
在你的.mm源文件中
#import "Enums.h" -(void)printEnumvals { NSLog(@"CARS %d BEAUTIFULCARS %d",CARS::ROLLSROYCE,BEAUTIFULCARS::ROLLSROYCE); }
如果你想避免在这个解决方案中使用C,那么就会有更多的肘部油脂,簿记和出错的机会.你需要一个标题和一个源文件.
// CARS.h @interface BEAUTIFULCARS : NSObject { enum { BEAUTIFULCARS_ROLLSROYCE = 45 } BEAUTIFULCARS; } @end @interface CARS : NSObject { enum { CARS_ROLLSROYCE } CARS; } @end // CARS.m @implementation BEAUTIFULCARS +(NSInteger)ROLLSROYCE{ return BEAUTIFULCARS_ROLLSROYCE; } @end @implementation CARS +(NSInteger)ROLLSROYCE{ return CARS_ROLLSROYCE; } @end
您的.m源几乎相同:
#import "CARS.h" -(void)printEnumvals { NSLog(@"CARS %d BEAUTIFULCARS %d",CARS.ROLLSROYCE,BEAUTIFULCARS.ROLLSROYCE); }
Objective-C不像大多数其他OO语言那样管理范围.接口定义接口支持的对象的属性和消息,但不支持公共或私有等保护级别.在@interface中定义枚举时,该枚举最终在全局范围内.