2012-11-19 147 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 –