Objective-C中的typedef枚举语句在哪里?

我担心的一个基本问题。 下面的代码工作,typedef枚举被识别,但我得到一个警告消息“在空声明中无用的存储类说明符”。 我在这里做错了什么,这是最好的地方,把typedef枚举?

#import <UIKit/UIKit.h> #import "CoreDataBaseTableViewController.h" typedef enum ColourType { BACKGROUND=1, LOW=2, HIGH=3, EXTRA=4 }; @interface ColourList : CoreDataBaseTableViewController <NSFetchedResultsControllerDelegate> { NSManagedObjectContext* moc; NSFetchedResultsController* fetchedResultsController; ... enum ColourType colourTarget; } ... 

您可以在C中有效的Objective-C中的任何位置使用枚举。现在(现在位于接口之上)是枚举的常用位置,它应该是全局可用的。 警告是因为你正在使用typedef ,但实际上并没有定义一个types。 如果你只是想创build一个枚举,这是没有必要的。 您只需使用:

 enum ColourType { BACKGROUND=1, LOW=2, HIGH=3, EXTRA=4 }; 

你使用typedef来定义一个types,这样可以更容易地引用常用的结构/联合/枚举/其他types。 如果select这样做,则应该在枚举定义之后放置一个types的名称,然后可以使用不带enum关键字的名称来引用enum

 typedef enum ColourType { BACKGROUND=1, LOW=2, HIGH=3, EXTRA=4 } MyColourType; MyColourType colour; 

或者,您可以创build枚举并键入具有相同效果的单独命令。

 enum ColourType { BACKGROUND=1, LOW=2, HIGH=3, EXTRA=4 }; typedef enum ColourType MyColourType; 

通过这个,考虑使用Objective-C的NS_ENUMmacros。 拿走它, 苹果文件
::有礼貌的掌声AD作为麦克::

NS_ENUMNS_OPTIONSmacros提供了一种定义C语言中的枚举和选项的简洁方法。 这些macros改进了Xcode中的代码完成,并明确指定了枚举和选项的types和大小。 另外,这个语法声明枚举的方式是由较老的编译器正确评估的,而新的可以解释底层的types信息。

语法示例:

  typedef NS_ENUM(NSInteger, DRWColourType) { DRWColourTypeBackground, DRWColourTypeLow, DRWColourTypeHigh, DRWColourTypeExtra }; 

为什么? NSHipster :

这种方法结合了上述所有方法中的优点,甚至为编译器提供了types检查和切换语句完整性的提示。

要么摆脱typedef ,要么提供一个别名的types:

 typedef enum X {...} Y; 

是的,它会正常工作,因为目标c只是C的超集。你必须为你的枚举提供一个别名,像这样:

 typedef enum ColourType { BACKGROUND=1, LOW=2, HIGH=3, EXTRA=4 } MyColourType;