6 votes

En Objective-C, est-il possible de définir une valeur par défaut pour une variable de classe ?

Existe-t-il un moyen de définir des valeurs par défaut pour les propriétés d'une classe ? Comme ce que l'on peut faire en Java, dans le constructeur de la classe ex.

MyClass(int a, String str){//constructor
  this.a = a;
  this.str = str;

  // I am loking for similar way in Obj-C as follows 
  this.x = a*5;
  this.y = 'nothing';
}

Pourquoi je cherche :

J'ai une classe avec environ 15 propriétés. Lorsque j'instancie la classe, je dois définir toutes ces variables/propriétés avec des valeurs par défaut. Cela rend mon code lourd et complexe. Si je pouvais définir des valeurs par défaut pour ces variables d'instance à l'intérieur de la classe, cela réduirait la complexité et la redondance du code.

4voto

Kurbz Points 5658

Si vous ne voulez pas spécifier de paramètres,

- (MyClass *)init {
    if (self = [super init]) {
        a = 4;
        str = @"test";
    }
    return self;
}

Alors quand vous le faites MyClass *instance = [[MyClass alloc] init] il définira les valeurs par défaut pour les ivars.

Mais je ne vois pas pourquoi vous avez posté le constructeur avec des paramètres mais que vous ne voulez pas les utiliser.

3voto

Écrire à le site init, qui fait tout le travail d'initialisation complète.

Ensuite, il suffit d'écrire autant d'initiateurs avec différents jeux de paramètres que nécessaire (mais réfléchissez-y : avez-vous vraiment besoin de este o que un ?). Non, ne les laissez pas faire le travail. Laissez-les remplir toutes les valeurs par défaut (celles que vous ne fournissez pas à l'utilisateur). message à este l'implémentation du traitement des messages) et de tout donner au premier.

Ce premier initateur est appelé initateur désigné. Et ne manquez pas Initialisateurs multiples et initialisateur désigné. Jamais ignorez celui qui est désigné !

Salutations

1voto

Wevah Points 17636

Dans l'interface de la classe :

@interface YourClass : NSObject {
    NSInteger a;
    NSInteger x;
    NSString  *str;
    NSString  *y;
}

- (id)initWithInteger:(NSInteger)someInteger string:(NSString *)someString;

@end

Ensuite, dans la mise en œuvre :

- (id)initWithInteger:(NSInteger)someInteger string:(NSString *)someString {
    if (self = [super init]) {
        a = someInteger;
        str = [someString copy];

        x = a * 5;
        y = [@"nothing" retain];
    }

    return self;
}

( NSInteger est un typedef pour int o long selon l'architecture).

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