聲音對我來說,就像你來自Java風格的語言背景一樣,我也一樣(抱歉,如果我在這裏猜錯了)。我也想了一會兒,然後我注意到Apple如何定義枚舉並使用它們來定義像你所描述的常量。
讓我們用虛構類Event
爲例:
在頭文件中,要定義一個新的枚舉:
typedef enum {
kEventType_EventName1,
kEventType_EventName2,
kEventType_EventName3
}EventType; //this is the name of the new type
其中EventName1
等,被替換的實際名稱你想要的事件(即kEventType_Direct
需要看到這些事件類型只需要導入您Event.h文件中其他任何類:。
#import "Event.h"
然後你可以像使用任何其他變量類型一樣使用EventType
(記住它不是NSObject,並且不能保留,釋放等等 - 你會像處理其他C類型一樣對待它:int ,float等)
你甚至可以將EventType類型的變量作爲其他類的成員,只要這些類導入了你的Event.h頭文件。
但是,它允許你做這樣的事情:
-(void) handleEventOfType: (EventType) evtType {
switch(evtType) {
case kEventType_EventType1 :
//stuff here
break;
//etc...
}
}
這是我所見過的做,所以目前最好的方法,並且似乎是普遍實行出國(至少在方式大部分我見過的項目)。無論如何,希望有所幫助!
來源
2011-12-04 07:15:01
Ian
非常感謝 - 所以我想不得不先指定類上下文,因爲在我的示例「EventType.EVENTTYPE_DIRECT」中你不能這樣做嗎?但相反,你工作的基礎上,它至少不是全球性的,因爲你必須先進行導入......哦,是的,你是非常正確的先前被污染的Java :) – Greg
是的,你有它。我也想得到類似ClassName.EVENT_TYPE的東西,並嘗試了一些不同的東西,但我沒有得到任何不涉及某些醜陋實現的東西。對於C++和Objective C,枚舉是要走的路:) – Ian