在Objective-C類我有一個使用形式的枚舉一個@private的ivar:私人枚舉聲明
typedef NS_ENUM(NSInteger, PlayerStateType) {
PlayerStateOff,
PlayerStatePlaying,
PlayerStatePaused
};
然而,我包括在類的頭文件中的此定義(因爲它的使用在裏面)。這有效地使公衆的類型,這不是我想要的。我怎樣才能讓這個枚舉類型是私有的?
在Objective-C類我有一個使用形式的枚舉一個@private的ivar:私人枚舉聲明
typedef NS_ENUM(NSInteger, PlayerStateType) {
PlayerStateOff,
PlayerStatePlaying,
PlayerStatePaused
};
然而,我包括在類的頭文件中的此定義(因爲它的使用在裏面)。這有效地使公衆的類型,這不是我想要的。我怎樣才能讓這個枚舉類型是私有的?
添加我的評論作爲答案。
您可以在.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
Ahh,ty。我不知道多個文件可以添加到'@interface ViewController()'ivars。我已經添加了方法,無論是在類別和沒有類別,但不知道ivars工作)。我想如果從一個類別添加ivars只是不工作。 –
@ Mr.Smith這是正確的,你可以只添加擴展名而不添加類別。 – iDev
請注意,您可以直接在您的@implementation中聲明您的實例變量 - 無需僅爲此使用類擴展。 –
在.m文件中定義它&在.m文件中聲明您的控制器類別中的privatearre ivar。要了解控制器類別,請查看Difference between @interface definition in .h and .m file。
我不認爲類類別可以添加實例變量。我可能會誤解你在說什麼,你能否更具體一些? –
@史密斯先生,你是對的。一個類別不能有實例變量。但擴展可以有。檢查這個http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocCategories.html – iDev
可能我的答案不明確,因爲我在類別和延伸困惑自己。但我想寫一個ACB回答的文字。 +1 ACB –
如何增加這個在它的.M類文件? – iDev
如果它在.m類文件中,那麼標題不會知道「PlayerStateType」的類型嗎? –
我假設你沒有在任何其他類中使用它,所以在這種情況下,爲什麼不在你的.m類中聲明你的私有變量。 – iDev