[英]Objective-C: Make private property public with Objective-C category
我正在尋找一種公開私有屬性(在類擴展名中的.m文件中聲明)的方法,以便可以在類外部訪問它, 而無需更改其原始類 。
有什么辦法可以做到這一點,可能是通過Objective-C類嗎?
從Apple文檔中可以看到,盡管不建議使用該類別,但可以重新定義原始類中已經存在的方法,但是我不確定該類別是否可以用於使“現有”屬性可供其他類使用。
通過使用類別浮出水面的方法,確實可以做到這一點。
@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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.