Objective-C - 定义一个枚举,可以像 ENUMTYPE.ENUMVAL 一样调用

标签 objective-c enums definition

我读过很多关于 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/

相关文章:

function - R,单独的参数函数,可导出自己的在线帮助

iphone - UIScrollview 滚动不流畅

C#:获取枚举名称作为字符串

swift - 从枚举的一个子部分中选择一个随机值

c# - 是否可以创建一个包含数组的枚举?

haskell 和函数的类型定义。有几个问题

delphi - 从 Delphi 中的其他单元定义类型

objective-c - MPMoviePlayerController 关闭后顶部状态栏消失

iphone - 如何将滑动手势添加到 UITableView 单元格?

ios - 使用 imageWithContentsOfFile : 从 XCAssets 获取启动图像