簡體   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