Comment accéder à  une liste de variable via un objet d'instance de classe

Hello !


 


Je développe actuellement un SDK et j'aimerais savoir comment accéder à  une liste de variables via un objet d'instance de classe de la manière suivante :


 


MyClass * myObject = [[MyClass alloc] init];


 


[myObject changerDeForme : myObject.FORME_CARRE];


[myObject changerDeForme : myObject.FORME_RECTANGLE];


[myObject changerDeForme : myObject.FORME_TRIANGLE];


...


 


Ces variables ( une bonne trentaine)  sont static et retournent un simple integer qui permettra d'identifier la forme demandé.


 


Suis-je obligé de définir un @property pour chacune de ces variables ou il y aurait un moyen plus optimisé ? 


 


Merci bien ! 


 


 


 


 


Réponses

  • LexxisLexxis Membre
    avril 2016 modifié #2

    En (Objective)C(++) le plus simple est d'utiliser une énumération. Et puisque ton Framework est en Objective C, il y a un type d'énumération spécifique NS_ENUM dont tu pourras assouvir ta soif de connaissance sur ce sujet ici.


  • Joanna CarterJoanna Carter Membre, Modérateur
    Cherches sur NS_ENUM et le sujet d'enums en général.
  • CéroceCéroce Membre, Modérateur
    avril 2016 modifié #4
    Je suis d'accord avec la solution d'une énumération, proposée par Lexxis et Joanna.

    Cependant, je souhaite attirer ton attention sur le fait que cette manière n'est pas du tout "objet", si derrière, tu utilises l'entier pour faire quelque chose comme ça:
    switch(typeForme) {
    case MyObjectFormeCarre:
    // Faire quelque chose
    break;
    case MyObjectFormeRectangle:
    // Faire autre chose
    break;

    etc.
    }
    Alors que ce qu'il faudrait est définir un protocole Forme et implémenter des classes concrètes qui s'y conforment.
  • rarimrarim Membre
    juin 2016 modifié #5

    Hi,

     
    Le NS_ENUM est la solution.

     
    Dans le .h 



    typedef NS_ENUM(NSUInteger, shape) {
     
    rectangle = 0,
    triangle = 1,
    square = 1,
        ...    
    };
     
    -(void)changeShape:(shape)newShape;

    Y'a juste à  call la méthode, et à  lui donner une forme prédéfinit dans le typedef.

     
    Merci à  tous pour vos retours et désolé pour cette réponse 3 mois après. 


Connectez-vous ou Inscrivez-vous pour répondre.