定义一个枚举比ENUMTYPE.ENUMVAL可以称为点
我已经阅读了许多关于objective-c中的枚举类型的内容,并且我看到有很多方法来定义它们。 但我没有看到正确的方法(如果有的话)定义一个可以用CARS.ROLLSROYCE调用的枚举,并且不能仅在代码中使用ROLLSROYCE。
所以我可以在CARS枚举中定义ROLLSROYCE,也可以在BEAUTIFULCARS枚举中定义ROLLSROYCE。
你知道如何定义这样一个枚举吗?
您正在尝试为Objective-C中的Enums实现名称空间。 你要求的是Objective-C中的许多手肘润滑脂。 您可能最好使用C ++来完成此任务,因为它很容易,而且afaik在任何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
定义一个枚举时,该枚举将在全局范围内结束。
对于我的情况,我不想使用C ++命名空间或为这种简单的情况编写冗余的Objective-C类,所以我退回到C.
// Enum.h
typedef struct
{
const int ROLLSROYCE;
} _CARS;
typedef struct
{
const int ROLLSROYCE;
} _BEAUTIFULCARS;
extern const _CARS CARS;
extern const _BEAUTIFULCARS BEAUTIFULCARS;
然后在Enum.m中定义值
// Enum.m
#import "Enum.h"
const _CARS CARS = {0};// 0 is to be assigned to ROLLSROYCE field in struct
const _BEAUTIFULCARS BEAUTIFULCARS = {1}; // same but with 1
最后,在你的“主”代码中
#import "Enum.h"
// Some method
{
NSLog(@"I can refer to CARS.ROLLSROYCE = %d and BEAUTIFULCARS.ROLLSROYCE = %d", CARS.ROLLSROYCE, BEAUTIFULCARS.ROLLSROYCE);
}
哪个会产生这个输出:
I can refer to CARS.ROLLSROYCE = 0 and BEAUTIFULCARS.ROLLSROYCE = 1
链接地址: http://www.djcxy.com/p/50109.html
上一篇: define an enum than can be dot called like ENUMTYPE.ENUMVAL
下一篇: error: There is no SDK with the name or path 'iphoneos'