【问题标题】:How to use ENUM as a parameter to a Method如何使用 ENUM 作为方法的参数
【发布时间】:2014-05-28 21:39:45
【问题描述】:

我在 Prefix.pch 文件中定义了一个这样的类型。

typedef NS_ENUM(NSUInteger, ServerType) {
ServerType0 = 0,
ServerType1,
ServerTypeCount
};

我有一个这样的方法声明:

+ (NSArray *)allServersForType:(enum ServerType)serverType;

但我收到警告

“'enum ServerType' 的声明在此函数之外将不可见”

当我尝试像这样通过它时更糟:

    NSArray *servers = [Server allServersForType:ServerTypeCount];

我收到一个错误“参数类型'enum ServerType'不完整”

我做错了什么?

提前致谢。

罗伯

【问题讨论】:

  • 去掉参数类型中的enum
  • 作为测试,将枚举声明移动到它自己的 .h 文件中,并将该 .h 文件导入到您需要的任何类中。
  • 这行得通,但我不明白为什么将它包含在我的 Prefix.pch 文件中不会。
  • 现在尝试在您的 .pch 文件中导入这个新的 .h 文件。
  • 是的,这也有效。为什么不直接呢?

标签: ios objective-c enums


【解决方案1】:

您已经对枚举进行了类型定义,因此无需再次指定 enum

+ (NSArray *)allServersForType:(ServerType)serverType;

来自 cmets 的更新:

将枚举的声明添加到声明此allServersForType: 方法的类的.h 文件中。

【讨论】:

  • 如果我按照您的建议进行操作,则会收到错误“预期类型”
  • @Rob 按 Command-B 或运行您的项目,它应该会消失。
  • @Rob 正如 rmaddy 建议的那样,尝试将声明移至它自己的 .h 文件并导入该 .h 文件。
【解决方案2】:

你的方法应该是这样的:

+(NSArray*)allServersForType:(ServerType)serverType;

调用它只是这样做:

NSArray *servers = [Server allServersForType:ServerTypeCount];// Server here is your class name

【讨论】:

  • 无需重复回答。
猜你喜欢
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 2019-09-12
  • 2010-09-21
  • 2018-06-18
相关资源
最近更新 更多