繁体   English   中英

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

[英]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_ENUMNS_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM