2014-06-13 1 views
0

Je cherche un moyen de rendre publique une propriété privée (déclarée dans le fichier .m dans l'extension de la classe) afin qu'elle soit accessible en dehors de la classe, sans changer sa classe d'origine.Objective-C: Rendez la propriété privée publique avec la catégorie Objective-C

Y a-t-il un moyen d'y parvenir, éventuellement via la catégorie Objective-C? Je vois dans la documentation d'Apple que cette catégorie peut être utilisée, bien que non recommandée, pour redéfinir des méthodes déjà dans la classe d'origine, mais je ne suis pas sûr qu'elle puisse être utilisée pour rendre des propriétés "existantes" disponibles à d'autres classes.

Répondre

0

Ceci est en effet possible en utilisant une catégorie pour faire surface le procédé.

@interface MyClass (Private) 

@property (nonatomic, strong) NSObject *privatePropertyToExpose; 
- (void) privateMethodIWantToUse; 

@end 

C'est tout ce qu'il faut, il suffit de coller que quelque part où votre classe d'appel peut le voir et qui vous permettra d'utiliser la méthode privée/propriété.

0

Oui, cela est possible, et est une astuce courante pour exposer les biens à tester

Ainsi, par exemple, vous avez dans votre Animal.m fichier

@interface FTGAnimal() 

@property (nonatomic, strong) FTGFood *food; 

@end 

@implementation FTGAnimal 

@end 

Dans votre FTGAnimalTests.m, vous pouvez faire comme ceci

@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