【问题标题】:Can an enum be defined in the same file as a class header that uses it in Objective-C?可以在与在 Objective-C 中使用它的类头文件相同的文件中定义枚举吗?
【发布时间】:2009-07-30 00:41:25
【问题描述】:

如果不是,并且它需要包含在单独的文件中(例如 MyEnums.h),我是否需要在每次 .m 或 .h 文件想要引用类型或其中之一时 #import MyEnums.h价值观?


这是 MyClass.h 的示例代码:

#import <Foundation/Foundation.h>

// #1 placeholder

@interface MyClass : NSObject {
}

// #2 placeholder

- (void)sampleMethod:(MyEnum)useOfEnum;

// #3 placeholder

@end

这是我要定义的枚举:

typedef enum MyEnum {
    Value1,
    Value2
}

如果我尝试将枚举定义放在 #1 中,我会收到 错误:在 'interface' 之前不能在此处指定类型或存储类

如果我尝试将枚举定义放在 #2 中,我会收到 error: expected identifier or '(' before 'end'

如果我尝试将枚举定义放在 #3 中,我会在 'MyEnum' 之前得到 error: expected ')'。这是抱怨参数“useOfEnum”,因为它的类型尚未定义。


那么这可以做到吗?或者什么是最好的方法来做到这一点并限制所需的#imports 数量?

【问题讨论】:

    标签: objective-c enums header-files


    【解决方案1】:

    它应该在 #1 位置工作,但我认为你需要这样写:

    typedef enum {
        Value1,
        Value2
    } MyEnum;
    

    为了正常工作。

    更新:我已经确认了这一点(至少在 Xcode 3.2 中)。上面显示的语法编译没有错误。

    【讨论】:

    • 它也可以在位置 2 工作——或者在实际使用枚举之前的任何其他地方——但它在除了位置 1 之外的任何地方在视觉上都更尴尬。
    • @Chuck:好点。我什至没有想过检查它是否可以在#2 和#3 位置工作。位置 #1 是要走的路。
    • 感谢您的回答,此链接:stackoverflow.com/questions/707512/typedef-enum-in-objective-c/… 解释了为什么需要将它放在大括号之后。
    • @eagle:在那个链接上很好找到。您总是可以指望 Rosenfield 先生提供高质量的答案 :)
    【解决方案2】:

    看起来您只是缺少 ;在 typedef 枚举声明的末尾。

    【讨论】:

      猜你喜欢
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多