J'apprends le langage de programmation Swift et pendant ce temps je suis parfois en contact avec l'ancien langage de programmation Objective-C et son code. Je suis absolument débutant et j'ai donc quelques questions pour mieux comprendre le Setter et le Getter. Donc, je sais que je peux créer une variable d'instance à travers des accolades dans le fichier .h mais normalement j'utilise des propriétés. Ces propriétés sont soutenues par une variable d'instance et offrent automatiquement une méthode Getter and Setter.Objective-C: Surcharge Getter & Setter avec Variable d'Instance (using _)
Exemple:
Véhicule .h fichier:
@interface Vehicle : NSObject
@property int myProperty;
@end
Parce que je créé cette propriété je ne pas déclarer une méthode getter et setter dans le fichier vehicle.m parce qu'ils sont créé automatiquement par le compilateur. Je peux donc créer un véhicule-objet, définir et obtenir la valeur.
Exemple
main.m
Vehicle *myvehicle = [[vehicle alloc] init];
[myvehicle myProperty] // myvehicle.myProperty
[myvehicle setMyProperty : 10] // myvehicle.myProperty = 10;
Maintenant, je lis qu'il est possible de remplacer la méthode getter et setter créé automatiquement de ma propriété créé "myProperty". Lorsque je déclare ma propre version du Getter and Setter, je dois déclarer deux méthodes dans le fichier vehicle.h et vehicle.m. Dans le fichier vehicle.m, je n'appelle pas l'objet en utilisant le mot-clé self mais en utilisant sa variable d'instance créée automatiquement (_myProperty). Est ce bien?
Je l'ai essayé mais je reçois toujours une erreur et je ne sais pas pourquoi et à quoi ça sert.
Exemple
Véhicule .h:
@interface Vehicle : NSObject
@property int myProperty;
-(int) myProperty; //my new Getter method
-(void) setMyProperty: (int)updatedMyProperty; //My new Setter method
@end
fichier .m du véhicule:
@implementation Vehicle
-(int) myProperty {
if (! _myProperty) {
_myProperty = NO;
}
return _myProperty;
}
-(void) setMyProperty: (int)updatedMyProperty {
if (_myProperty == updatedMyProperty) return;
_myProperty = updatedMyProperty;
}
@end
je reçois toujours l'erreur "Utilisation d'identificateur non déclaré" et je n » Je sais pourquoi. Si je comprends bien, je n'ai pas besoin de déclarer l'ivar ou son nom en utilisant @synthesize car le compilateur crée automatiquement l'ivar appelé _myProperty pour moi. Je dois juste utiliser @synthesize quand je veux changer le nom de l'ivar.
Je ne suis pas sûr de savoir pourquoi je suis coincé et quel est le point. Pourriez-vous l'expliquer? Merci d'avance!
non apparentés, mais surtout vous avez '[myvehicle setMyProperty = 10] '. Clairement, cela devrait être '[myvehicle setMyProperty: 10]'. – Rob