2010-10-08 68 views
2

我有一流的距離和類型定義枚舉單位,枚舉的typedef Objective-C的

@interface Distance:NSObject{ 

double m_miles; 

} 

@property double m_miles; 

-(Distance *) initWithDistance: (double) value andUnit:(Unit) unit; 

@implementation Distance 

-(Distance *)initWithDistance: (double) value andUnit:(Unit) unit{ 

    self = [super init]; 

if (self){ 

    switch (unit) { 

    case Unit.miles: m_miles = value; 

         break; 

    case Unit.km:  m_miles = value/1.609344; 

         break; 
} 


} 

在哪裏申報我的枚舉單位?如何訪問

typedef enum{ 

    miles; 

    km; 

}Unit 

在其他類,我應該能夠調用Distance.Unit.km或英里:

Distance *a = [[Distance alloc] initWithDistance: 10.2 andUnit: Distance.Unit.km]; 

回答

6

在C的enum不使自己的價值觀「合格」。你必須訪問它

Distance *a = [[Distance alloc] initWithDistance: 10.2 andUnit:km]; 
//                ^^ 
//                no Distance.Unit.stuff 
2

它看起來像你正在嘗試做類的typedef像你可以在說C + +。我不記得在Objective-C中是否允許這樣做,但那不是我在這裏怎麼做。我會保留班級之外的枚舉。用typedef創建另一個頭文件。雖然這是一個微不足道的例子,但在Distance類之外的枚舉可能還有其他用途,所以在外部定義它。

另一種可能性,如果這是所有你使用它的是有兩個初始化程序initWithMiles:initWithKilometers:

1

Objective-C不會改變C關鍵字的含義。它被設置爲使用消息和對象。您應該在@interface之前聲明enum。我建議你遵循JeffW使用initWithMiles:initWithKilometers:,請參閱可可基礎知識瞭解如何設計方法。