在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