作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我读过很多关于 objective-c 中枚举类型的文章,我发现有很多方法可以定义它们。但是我没有看到正确的方法(如果有的话)来定义一个可以用 CARS.ROLLSROYCE 调用并且不能在代码中仅与 ROLLSROYCE 一起使用的枚举。
所以我可以在 CARS 枚举和 BEAUTIFULCARS 枚举中定义 ROLLSROYCE。
你知道如何定义这样一个枚举吗?
最佳答案
您正在尝试在 Objective-C 中为您的枚举实现命名空间。您要求的是 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)定义接口(interface)支持的对象的属性和消息,但不支持公共(public)或私有(private)等保护级别。当您在 @interface
中定义枚举时,该枚举将在全局范围内结束。
关于Objective-C - 定义一个枚举,可以像 ENUMTYPE.ENUMVAL 一样调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4703314/
我是一名优秀的程序员,十分优秀!