Annotation en objective-C ?
Salut,
Je cherche des pistes pour réaliser un framework de génération de code,
connaissez-vous un moyen de faire en Objective-C l'équivalent des annotations, comme en Java par exemple?
Typiquement je voudrais pouvoir mettre sur une property quelque chose comme:
@interface Person : NSObject {
@Mandatory
NSString* firstName;
@NotMandatory
NSString* lastName;
}
@end
Merci,
Vincent
Je cherche des pistes pour réaliser un framework de génération de code,
connaissez-vous un moyen de faire en Objective-C l'équivalent des annotations, comme en Java par exemple?
Typiquement je voudrais pouvoir mettre sur une property quelque chose comme:
@interface Person : NSObject {
@Mandatory
NSString* firstName;
@NotMandatory
NSString* lastName;
}
@end
Merci,
Vincent
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
par exemple on définit une classe et on annote certaines propriétés et méthodes qui sont alors automatiquement exposé dans un service.
pas besoin de définir une classe ou une interface spécifique ni de mettre d'un côté les éléments qui sont exposé et de l'autre se qui ne le sont pas.
je n'ai pas vu ça en objective C mais les préprocesseurs peuvent très bien je pense faire ça.
A+JYT
Macros qui peuvent même ainsi être mappées à des directives particulières (pragma, [tt]__attribute__[/tt], etc) si le compilateur les prend en compte.
Par exemple tu pourras trouver des macros comme [tt]NS_REQUIRES_NIL_TERMINATION[/tt] derrière une déclaration de méthode à nombre variable d'argument, qui dans le cas où le compilateur est gcc, est définie comme étant la directive [tt]__attribute((sentinel(0,1)))[/tt] (permettant alors au compilateur de savoir que pour cette fonction à nombre variable d'argument, le dernier argument doit toujours être nil pour terminer la liste et si ce n'est pas le cas le compilo mettra un warning) alors que dans le cas de Win32 ou d'un autre compilateur est définie à ... rien (texte vide) ce qui fait comme si la macro n'était même pas présente (car le compilateur ne gère pas cette directive __attribute__ donc n'est pas capable de gérer de telles vérifications).
Je ne connaissais pas les macros je vais me renseigner là dessus.
Par contre je me demande si il serait possible de faire un framework qui interpréterait ces informations au runtime, je suis entrain de regarder le runtime programming guide, je reviendrais surement poser des questions ici
Merci pour vos réponses !