我有不同的頁面大小。我想使用枚舉來選擇頁面的大小。這樣的想法typedef枚舉與CGSize?
typedef NS_ENUM(CGSize, SizeType) {
MAXSIZE=CGSizeMake(640, 1196),
MIDIUMSIZE=CGSizeMake(320, 590),
MINSIZE=CGSizeMake(160, 280)
};
它有可能嗎?如果不是那麼最好的辦法做到這一點,我需要在我的整個應用程序的這個結合的價值
我有不同的頁面大小。我想使用枚舉來選擇頁面的大小。這樣的想法typedef枚舉與CGSize?
typedef NS_ENUM(CGSize, SizeType) {
MAXSIZE=CGSizeMake(640, 1196),
MIDIUMSIZE=CGSizeMake(320, 590),
MINSIZE=CGSizeMake(160, 280)
};
它有可能嗎?如果不是那麼最好的辦法做到這一點,我需要在我的整個應用程序的這個結合的價值
根據其他答案,枚舉基本上是整數,而不是結構。
你可以只#define
在一個常數的數值文件:
#define MAXSIZE CGSizeMake(640, 1196)
#define MIDIUMSIZE CGSizeMake(320, 590)
#define MINSIZE CGSizeMake(160, 280)
雖然你可能要重新命名它們更容易助記符,可讀性和自動完成的目的,如:
#define PURPOSE_SIZE_MAX ...
#define PURPOSE_SIZE_MED ...
...
你不能。 枚舉類型是一個C類型,它必須是整數類型,每個成員也必須是相同的類型。 你可以使用char,BOOL,int,uint,NSInteger等。
對於常量浮點值,您需要逐個聲明它們。
結構也需要逐個完成。
好很好..你能告訴我做這件事的最好方法..我不想一一使用。它需要我的整個應用程序 –
請參閱上面有關常量文件。或者將它添加到你的pch文件中。 – uchuugaka
你不能使用枚舉。在Objective C中,enum從C繼承。因此它被隱式轉換爲int。
的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
)
根據我的經驗,我會盡可能避免使用#define。由於您丟失了部分類型信息,因此它們是調試的噩夢。爲什麼不只是使用'const'? –
@ GabrielePetronella,主要是簡潔。兩者都很明顯,所以這部分是個人喜好的事情 – Wain
「const」定義的長度比#define長4個字符。我不會說它是一個巨大的勝利,特別是考慮到你付出的代價。 –