簡體   English   中英

Objective-C:通過Objective-C類別公開私有財產

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM