我在
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中定义枚举时,该枚举最终在全局范围内.