gpt4 book ai didi

objective-c - 像在 java 中一样为 objC 重新定义枚举

转载 作者:行者123 更新时间:2023-12-01 10:30:49 25 4
gpt4 key购买 nike

在 java 中这是可能的:

enum VisitSetting {
NOT_VISITED,
QUERIED_VISITED,
CONFIRMED_VISITED
}

enum ExcludeSetting {
NONE,
QUERIED_VISITED_AND_CONFIRMED_VISITED,
CONFIRMED_VISITED
}

请注意,CONFIRMED_VISITED 也在 VisitSetting 和 ExcludeSetting 中。

我想在 objective-c 中使用一些类似的东西,但后来我得到了 Redefinition of enumerator 'CONFIRMED_VISITED'

这是实现:

#ifndef RouteApp_IGConstants_h
#define RouteApp_IGConstants_h

typedef enum {
NOT_VISITED = 0,
QUERIED_VISITED,
CONFIRMED_VISITED
} VisitSetting;

typedef enum {
NONE = 0,
QUERIED_VISITED_AND_CONFIRMED_VISITED,
CONFIRMED_VISITED
} ExcludeSetting;



#endif

如何解决这个问题?我宁愿不重命名 CONFIRMED_VISITED。

最佳答案

在 C 中,因此在 Objective-C 中,枚举数位于全局命名空间中。所以你不能在两个枚举中使用同一个枚举器。您将必须在 Objective-C 中重命名至少一个 CONFIRMED_VISITED 枚举器。通常我们为枚举的每个成员使用一个公共(public)前缀,如下所示:

typedef enum {
VisitSettingNotVisited = 0,
VisitSettingQueried,
VisitSettingConfirmed
} VisitSetting;

typedef enum {
ExcludeSettingNone = 0,
ExcludeSettingQueriedAndConfirmed,
ExcludeSettingConfirmed
} ExcludeSetting;

如果您愿意使用 Objective-C++,那么您可以使用 enum class .这是一个新的 C++ 功能,在纯 C 中没有等效项。

enum class VisitSetting {
NOT_VISITED,
QUERIED_VISITED,
CONFIRMED_VISITED
};

enum class ExcludeSetting {
NONE,
QUERIED_VISITED_AND_CONFIRMED_VISITED,
CONFIRMED_VISITED
};

// Example usage:
VisitSetting vs = VisitSetting::CONFIRMED_VISITED;
ExcludeSetting es = ExcludeSetting::CONFIRMED_VISITED;

Xcode 4.6.2 支持此 C++11 功能。它可能在旧版本中受支持;我不知道。

关于objective-c - 像在 java 中一样为 objC 重新定义枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16262711/

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