146 votes

Variables statiques de niveau classe en Objective C

J'ai une classe Film, dont chacune stocke un ID unique. En C#, Java etc., je peux définir un static int currentID et à chaque fois que je définis l'ID, je peux augmenter le currentID et le changement se produit au niveau de la classe et non de l'objet. Cela peut-il être fait en Objective C ? J'ai eu beaucoup de mal à trouver une réponse à cette question.

3voto

Anonymous Points 31

Voici une option :

+(int)getId{
    static int id;
    //Do anything you need to update the ID here
    return id;
}

Notez que cette méthode sera la seule méthode pour accéder à l'id, donc vous devrez la mettre à jour d'une manière ou d'une autre dans ce code.

2voto

Jacob Oscarson Points 4275

(A proprement parler, il ne s'agit pas d'une réponse à la question, mais d'après mon expérience, elle peut s'avérer utile lors de la recherche de variables de classe).

Une méthode de classe peut souvent jouer plusieurs des rôles que jouerait une variable de classe dans d'autres langages (par exemple, modifier la configuration pendant les tests) :

@interface MyCls: NSObject
+ (NSString*)theNameThing;
- (void)doTheThing;
@end
@implementation
+ (NSString*)theNameThing { return @"Something general"; }
- (void)doTheThing {
  [SomeResource changeSomething:[self.class theNameThing]];
}
@end

@interface MySpecialCase: MyCls
@end
@implementation
+ (NSString*)theNameThing { return @"Something specific"; }
@end

Maintenant, un objet de la classe MyCls appelle Resource:changeSomething: avec la chaîne @"Something general" sur un appel à doTheThing: mais un objet dérivé de MySpecialCase avec la chaîne @"Something specific" .

0voto

rd_ Points 56

Vous pouvez renommer la classe en classA.mm et y ajouter des fonctionnalités C++.

0voto

Rudolf Adamkovic Points 4202

Une autre possibilité serait d'avoir un peu NSNumber sous-classe singleton.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X