gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 03:38:04 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com