我正在寻找一种方法来创建一个私有属性(在类扩展名中的.m文件中声明)public,以便它可以在类外部访问,而不更改其原始类。
有没有办法实现这一点,可能是通过Objective-C类别?
我从Apple文档中看到,虽然不推荐使用类别来重新定义原始类中已有的方法,但我不确定它是否可用于使“现有”属性可用于其他类。 / p>
答案 0 :(得分:0)
这确实可以通过使用类别来表示方法。
@interface MyClass (Private)
@property (nonatomic, strong) NSObject *privatePropertyToExpose;
- (void) privateMethodIWantToUse;
@end
这就是所需要的,只需坚持你的调用类可以看到它的地方,这将允许你使用私有方法/属性。
答案 1 :(得分:0)
是的,这是可能的,并且是将这些属性公开给测试
的常见技巧例如,您在 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