[英]where does a typedef enum statement go in Objective-C?
我担心的一个基本问题。 以下代码有效,并且可以识别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;
}
...
你可以在Objective-C中的任何地方放置一个枚举,它在C中是有效的。你现在拥有它(在界面之上)是枚举的常见位置,它应该是全局可用的。 警告是因为您使用的是typedef
,但实际上并未定义类型。 如果您只是想创建枚举,则没有必要。 你只需使用:
enum ColourType {
BACKGROUND=1,
LOW=2,
HIGH=3,
EXTRA=4
};
您使用typedef
来定义类型,这使得更容易引用常用的结构/联合/枚举/其他类型。 如果选择这样做,则应在枚举定义之后为该类型设置名称,然后可以使用不带enum
关键字的名称来引用enum
。
typedef enum ColourType {
BACKGROUND=1,
LOW=2,
HIGH=3,
EXTRA=4
} MyColourType;
MyColourType colour;
或者,您可以创建枚举并键入具有相同效果的单独命令。
enum ColourType {
BACKGROUND=1,
LOW=2,
HIGH=3,
EXTRA=4
};
typedef enum ColourType MyColourType;
通过by,考虑使用Objective-C的NS_ENUM
宏。 拿走它, Apple Docs
::礼貌的掌声,因为AD带麦克风::
NS_ENUM
和NS_OPTIONS
宏提供了一种简洁,简单的方法来定义基于C语言的枚举和选项。 这些宏改进了Xcode中的代码完成,并明确指定了枚举和选项的类型和大小。 此外,此语法以较旧的编译器正确计算的方式声明枚举,以及可以解释基础类型信息的较新的编译器。
语法示例:
typedef NS_ENUM(NSInteger, DRWColourType) {
DRWColourTypeBackground,
DRWColourTypeLow,
DRWColourTypeHigh,
DRWColourTypeExtra
};
为什么? NSHipster :
这种方法结合了所有上述方法中的最佳方法,甚至为编译器提供了类型检查和切换语句完整性的提示。
要么摆脱typedef
,要么为类型提供别名:
typedef enum X {...} Y;
是的,它会工作得很好,因为目标c只是C的超集。你必须为你的枚举提供一个别名,如下所示:
typedef enum ColourType {
BACKGROUND=1,
LOW=2,
HIGH=3,
EXTRA=4
} MyColourType;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.