2011-05-06 77 views
17

在一個頭文件中,我有這樣的:@class for typedef枚舉?

// PasscodeInputViewController.h 

typedef enum { 
    PasscodeInputModeOn,  // set passcode 
    PasscodeInputModeEnter, // enter passcode 
    PasscodeInputModeChange, // change passcode 
    PasscodeInputModeOff  // turn off passcode 
} PasscodeInputMode; 

在另一頭文件,我宣佈,採用PasscodeInputMode類型的參數的方法:

#import "PasscodeInputViewController.h" 

- (void)presentPasscodeInputWithMode:(PasscodeInputMode)mode; 

正如你所看到的,我用#import "PasscodeInputViewController.h"如上所示PasscodeInputMode被識別,但是等價於typedef enum

+0

你是什麼意思?你想要做什麼? – ughoavgfhw 2011-05-06 03:46:10

+0

#import有什麼問題? – 2011-05-06 03:49:58

+0

@Inder Kumar Rathore,對於類名稱,您應該在.m文件的頭文件&#import中使用'@ class'。我想知道是否有類似於'typedef enum'的'@ class'的東西。 – ma11hew28 2011-05-06 14:49:09

回答

14

沒有,沒有等價物。

枚舉在Objective-C是如C.枚舉由於底層類型枚舉的是依賴於實現相同的(例如,它可能是charint),編譯器必須知道枚舉的完整聲明。

也就是說,一個類型說明符

enum nameOfEnum 

而不列出的枚舉成員是有效的C提供它出現後它指定的類型是完整的,即,enum nameOfEnum { … }必須在翻譯單元預先出現。

總結:沒有前向聲明的枚舉,只有後向引用。

+0

謝謝!那麼,我應該堅持使用'#import'? – ma11hew28 2011-05-06 14:47:28

+1

@Matt是。沒有什麼可以做的,真的。 – 2011-05-06 20:46:10

+0

@Bavarious我聽說ObjectiveC現在也使用C++ 11的優勢,所以它支持固定類型的枚舉? – onmyway133 2014-01-20 03:56:28

-1

我想你想要的是一個具有PasscodeInputMode作爲它的屬性的類。通過這種方式,您可以傳遞該類的實例化對象,並可以設置/獲取該屬性,並使用它執行其他類似對象的事情(假設這就是爲什麼您希望找到「@class等價物」

0

爲了使兩個類能夠相互引用,類的前向聲明是必需的。這並非罕見有在對方的條款中定義的兩個類:

@class ClassB; 

@interface ClassA : NSObject 
{ 
    ClassB *objectB; 
} 
@end 

@interface ClassB : NSObject 
{ 
    ClassA *objectA; 
} 
@end 

有沒有辦法讓那個編譯不向前聲明。

枚舉也是如此。 enum只是創建一組命名值...你不能在另一個的定義中包含一個枚舉。因此,從不需要轉發聲明枚舉。

2

@Caleb,@Bavarious:

最近的方式(一月,2017)轉發在Objective-C聲明枚舉(NS_ENUM/NS_OPTION)是使用以下:

// Forward declaration for XYZCharacterType in other header say XYZCharacter.h 
typedef NS_ENUM(NSUInteger, XYZCharacterType); 


// Enum declaration header: "XYZEnumType.h" 
#ifndef XYZCharacterType_h 
#define XYZCharacterType_h 

typedef NS_ENUM(NSUInteger, XYZEnumType) { 
    XYZCharacterTypeNotSet, 
    XYZCharacterTypeAgent, 
    XYZCharacterTypeKiller, 
}; 

#endif /* XYZCharacterType_h */` 

類似問題Forward-declare enum in Objective-C