我正在寻找一种方法,使私有财产(类扩展中.m文件声明)公有的,因此它是在类的外部访问, 而不改变其原来的类 。
有没有办法做到这一点,可能通过Objective-C的类别?
我从苹果公司的文档查看该类别可以使用,但不建议,已经重新定义了原始类的方法,但我不知道,如果它可以被用来制造“现有”提供给其他类的属性。
我正在寻找一种方法,使私有财产(类扩展中.m文件声明)公有的,因此它是在类的外部访问, 而不改变其原来的类 。
有没有办法做到这一点,可能通过Objective-C的类别?
我从苹果公司的文档查看该类别可以使用,但不建议,已经重新定义了原始类的方法,但我不知道,如果它可以被用来制造“现有”提供给其他类的属性。
这确实是可以通过使用类别的表面的方法。
@interface MyClass (Private)
@property (nonatomic, strong) NSObject *privatePropertyToExpose;
- (void) privateMethodIWantToUse;
@end
这一切都需要,只要坚持在某处在您的调用的类可以看到它,这将让你使用私有方法/属性。
是的,这是可能的,而且是一种常见的伎俩揭露那些属性测试
因此,例如,你在你的Animal.m文件中有这样的
@interface FTGAnimal ()
@property (nonatomic, strong) FTGFood *food;
@end
@implementation FTGAnimal
@end
在你FTGAnimalTests.m,你可以这样做
@interface FTGAnimal (FTGAnimalTests)
@property (nonatomic, strong) FTGFood *food;
@end
SPEC_BEGIN(FTGAnimalTests)
describe(@"FTGAnimalTests", ^{
context(@"default context", ^{
it(@"should initialize correct animal", ^{
FTGAnimal *animal = [[FTGAnimal alloc] init];
[[animal.food should] beMemberOfClass:[FTGFood class]];
});
});
});
SPEC_END