Oli*_*ver 7 enums definition objective-c
我在objective-c中读过很多关于枚举类型的东西,我看到有很多方法可以定义它们.但是我没有看到正确的方法(如果有的话)来定义可以使用CARS.ROLLSROYCE调用的枚举,并且不能仅在代码中使用ROLLSROYCE.
所以我可以在CARS枚举中以及BEAUTIFULCARS枚举中定义ROLLSROYCE.
你知道定义这样一个枚举的方法吗?
您正在尝试在 Objective-C 中为枚举实现名称空间。您所要求的是 Objective-C 中的大量苦劳。为此,您可能最好使用 C++,因为它很简单,而且据我所知,任何 iOS 或 Cocoa 应用程序都完全支持它。您必须将#importC++ 代码的文件重命名为.mmfiles 而不是.mfiles,并且 C++ 编译器可能比 Objective-C 编译器更棘手。按照这条路线,您将创建一个头文件,例如Enums.h.
// Enums.h
namespace CARS
{
enum CARS
{
ROLLSROYCE
};
}
namespace BEAUTIFULCARS
{
enum BEAUTIFULCARS
{
ROLLSROYCE = 45
};
}
Run Code Online (Sandbox Code Playgroud)
在你的.mm源文件中
#import "Enums.h"
-(void)printEnumvals
{
NSLog(@"CARS %d BEAUTIFULCARS %d",
CARS::ROLLSROYCE,
BEAUTIFULCARS::ROLLSROYCE);
}
Run Code Online (Sandbox Code Playgroud)
如果您想避免使用 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
Run Code Online (Sandbox Code Playgroud)
你的.m来源几乎相同:
#import "CARS.h"
-(void)printEnumvals
{
NSLog(@"CARS %d BEAUTIFULCARS %d",
CARS.ROLLSROYCE,
BEAUTIFULCARS.ROLLSROYCE);
}
Run Code Online (Sandbox Code Playgroud)
Objective-C 并不像大多数其他 OO 语言那样管理范围。接口定义接口支持的对象的属性和消息,但不支持公共或私有等保护级别。当您在 an 中定义枚举时@interface,该枚举最终位于全局范围内。