2012-11-19 177 views
3

在Objective-C類我有一個使用形式的枚舉一個@private的ivar:私人枚舉聲明

typedef NS_ENUM(NSInteger, PlayerStateType) { 
    PlayerStateOff, 
    PlayerStatePlaying, 
    PlayerStatePaused 
}; 

然而,我包括在類的頭文件中的此定義(因爲它的使用在裏面)。這有效地使公衆的類型,這不是我想要的。我怎樣才能讓這個枚舉類型是私有的?

+0

如何增加這個在它的.M類文件? – iDev

+0

如果它在.m類文件中,那麼標題不會知道「PlayerStateType」的類型嗎? –

+0

我假設你沒有在任何其他類中使用它,所以在這種情況下,爲什麼不在你的.m類中聲明你的私有變量。 – iDev

回答

5

添加我的評論作爲答案。

您可以在.m類中添加此項,以便在導入時不會與其他類共享。您可以將其添加到導入語句下方。如果此類型的參數僅用於此.m類,則可以在該.m文件中聲明該參數。

您的m級的樣子,

typedef NS_ENUM(NSInteger, PlayerStateType) { 
    PlayerStateOff, 
    PlayerStatePlaying, 
    PlayerStatePaused 
}; 

@interface ViewController() //Use an extension like this in .m class 

@property (nonatomic) PlayerStateType param; 

@end 
+2

Ahh,ty。我不知道多個文件可以添加到'@interface ViewController()'ivars。我已經添加了方法,無論是在類別和沒有類別,但不知道ivars工作)。我想如果從一個類別添加ivars只是不工作。 –

+1

@ Mr.Smith這是正確的,你可以只添加擴展名而不添加類別。 – iDev

+0

請注意,您可以直接在您的@implementation中聲明您的實例變量 - 無需僅爲此使用類擴展。 –

1

在.m文件中定義它&在.m文件中聲明您的控制器類別中的privatearre ivar。要了解控制器類別,請查看Difference between @interface definition in .h and .m file

+0

我不認爲類類別可以添加實例變量。我可能會誤解你在說什麼,你能否更具體一些? –

+1

@史密斯先生,你是對的。一個類別不能有實例變量。但擴展可以有。檢查這個http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocCategories.html – iDev

+0

可能我的答案不明確,因爲我在類別和延伸困惑自己。但我想寫一個ACB回答的文字。 +1 ACB –