我在类中有一个私有变量,我试图从外部类访问该变量。 有没有办法可以做到这一点?
答案 0 :(得分:21)
根据定义,私有实例变量是私有的。您无法从外部访问它们。如果您是该类的作者,则应为该变量提供访问器方法。如果你不是,你应该避免访问变量。
然而,有办法规避这种限制。
您可以在第一个类上创建一个类别,并为实例变量添加一个访问器方法。
或者您可以使用键值编码来访问变量。
[object valueForKey:@"variable_name"];
答案 1 :(得分:1)
私有定义意味着它不能被外部类访问。访问私有数据的唯一真正方法是通过接口中提供的访问器方法。
在objective-c中,您可以创建所谓的类别。这些是一组方法,您可以基本上使用它们来扩展类的功能。我对获取在外部类中声明的私有成员(那些没有完整实现的私有成员)的态度并不乐观,但我能够为自己的类编写一个访问私有成员的类别。
#import "OtherClass.h"
@interface OtherClass(RandomAccessor)
-(int) getMyVar;
@end
@implementation OtherClass(RandomAccessor)
-(int) getMyVar
{
return self->myPrivateVar;
}
@end
我不建议做这样的事情,因为开发人员通常会出于某种原因将数据设为私有。
答案 2 :(得分:0)
您可以创建自己的get / set方法......或者您可以使用Objective-C标准,将变量声明为.h文件中的属性,然后将其合成到.m文件中... Keep记住,如果其他类可以看到变量并访问它,那么它就不再是“私有”变量
testViewController.h
@interface testViewController : UIViewController
{
NSString *someString;
}
@property (nonatomic, retain) NSString *someString;
@end
testViewController.m
#import testViewController.h
@interface testViewController
@synthesize someString=_someString;
@end