Здесь, похоже, есть две проблемы:
- получить доступ к закрытому классу
- добавить свойство к нему.
Если вы знаете имя частного класса, вы можете просто использовать его, определив его снова:
// SomeClass.h
@interface SomeClass : NSObject <ComplexNumber>
@end
Это может показаться странным, но этого будет достаточно, чтобы пройти этап компиляции вашего процесса сборки и позволить вам использовать это свойство в вашем коде. Существующая реализация частного класса будет достаточной для работы со стадией связи.
Как указывает Даниэла Панталеоне , вторая часть очень близка к Objective-C: свойство / экземпляр переменной в категории . Однако я добавил это для полноты:
// ComplexNumber.h
@protocol ComplexNumber <NSObject>
@property (assign) BOOL offline;
@end
//ComplexNumber.m
@import ObjectiveC;
@implementation NSObject (ComplexNumber)
static void *ComplexNumberKey = &ComplexNumberKey;
-(void)setOffline:(BOOL)offline
{
objc_setAssociatedObject(self, &ComplexNumberKey, @(offline), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(BOOL)offline
{
NSNumber *offline = objc_getAssociatedObject(self, &ComplexNumberKey);
return offline.boolValue;
}
@end