定义一个枚举比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'