2014-03-02 75 views
1

我有不同的頁面大小。我想使用枚舉來選擇頁面的大小。這樣的想法typedef枚舉與CGSize?

typedef NS_ENUM(CGSize, SizeType) { 
    MAXSIZE=CGSizeMake(640, 1196), 
    MIDIUMSIZE=CGSizeMake(320, 590), 
    MINSIZE=CGSizeMake(160, 280) 
}; 

它有可能嗎?如果不是那麼最好的辦法做到這一點,我需要在我的整個應用程序的這個結合的價值

回答

3

根據其他答案,枚舉基本上是整數,而不是結構。

你可以只#define在一個常數的數值文件:

#define MAXSIZE CGSizeMake(640, 1196) 
#define MIDIUMSIZE CGSizeMake(320, 590) 
#define MINSIZE CGSizeMake(160, 280) 

雖然你可能要重新命名它們更容易助記符,可讀性和自動完成的目的,如:

#define PURPOSE_SIZE_MAX ... 
#define PURPOSE_SIZE_MED ... 
... 
+3

根據我的經驗,我會盡可能避免使用#define。由於您丟失了部分類型信息,因此它們是調試的噩夢。爲什麼不只是使用'const'? –

+0

@ GabrielePetronella,主要是簡潔。兩者都很明顯,所以這部分是個人喜好的事情 – Wain

+0

「const」定義的長度比#define長4個字符。我不會說它是一個巨大的勝利,特別是考慮到你付出的代價。 –

2

你不能。 枚舉類型是一個C類型,它必須是整數類型,每個成員也必須是相同的類型。 你可以使用char,BOOL,int,uint,NSInteger等。

對於常量浮點值,您需要逐個聲明它們。

結構也需要逐個完成。

+0

好很好..你能告訴我做這件事的最好方法..我不想一一使用。它需要我的整個應用程序 –

+0

請參閱上面有關常量文件。或者將它添加到你的pch文件中。 – uchuugaka

2

你不能使用枚舉。在Objective C中,enum從C繼承。因此它被隱式轉換爲int。

5

的C(因此在Objective-C中)中的enum是一組整數值,這就是爲什麼您不能將CGSize值作爲它的成員。

而是使用常量。最好的選擇是看看Apple做了什麼並且模仿它。 如果你看看CGGeometry.h,你會發現各種常數的定義。

例如,CGSizeZero被定義爲

CG_EXTERN const CGSize CGSizeZero 
    CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0); 

然後你可以在你的頭

CG_EXTERN const CGSize kMaxSize; 

聲明不變,然後在執行定義它做類似的事情

const CGSize kMaxSize = (CGSize){ 640, 1196 }; 

作爲獎勵,你還可以定義一個類型的代名詞CGSize,例如:

typedef CGSize MySizeType; 

,然後用它來聲明常量和變量,例如

CG_EXTERN const MySizeType kMaxSize; 
... 
@property (nonatomic) MySizeType aSize; 

這簡化版,從技術角度就發生了變化,但它的語義更好,它基本上實現了typedef enum目的相同(這恰恰是提供了一個方便的同義詞int