Explication de la déclaration - (IBAction) changeGreeting: (id) expéditeur; iPhone
-
25-10-2019 - |
Question
partout où ils disent ce que IBAction est, mais ne pas expliquer ce que les moyens entiers de déclaration.
Qu'est-ce que l'expéditeur et id?
Cordialement, Namratha
La solution
-
D'après mes
IBAction
connaissances juste impliquevoid
-
id
est un type générique C, qui accepte des objets de toute nature / classe. Il est un peu semblable à ce pointeur vide dansC
. Nous pouvons utiliserid
comme paramètre d'une méthode, en cas, si des objets de type de différence de classes auront accès à cette méthode. -
sender
, ici,- est un nom de paramètre nommé humain (vous pouvez le nommer quoi que ce soit)
- il renvoie l'objet qui appelle la méthode
changeGreeting:
Exemple:
laisse supposer la méthode changeGreeting:
est définie dans ClassA
, et il se lit comme suit.
- (IBAction)changeGreeting:(id)sender {
[sender setText:@"Hello %@", [sender class]];
// Nothing can be returned from this method
}
Et considérer que nous avons les lignes Class B
suivantes.
// LINE 1
[aLabel addTarget:objOfClassA action:@selector(changeGreeting:) forControlEvents:UIControlEventTouchUpInside];
// LINE 2
[aTextField addTarget:objOfClassA action:@selector(changeGreeting:) forControlEvents:UIControlEventTouchUpInside];
à la ligne 1, est le aLabel
expéditeur et objOfClassA
est le récepteur . Et en ligne 2: aTextField
est le expéditeur et objOfClassA
est le récepteur . HereaLabel
& aTextField
sont appelés expéditeurs parce qu'ils sont appeler la méthode changeGreeting:
. Et objOfClassA
est appelé récepteur parce que la méthode objOfClassA's
de changeGreeting:
est appelé ici.
Quand les touches de l'utilisateur à l'intérieur du aLabel
ou aTextField
, leur text
seront modifiés pour Hello UILabel
ou Hello UITextField
respectivement.
L'autre façon:
Nous pouvons également appeler la méthode de changeGreeting:
de objOfClassA
de Class B
comme suit.
[objOfClassA changeGreeting:aLabel];
[objOfClassA changeGreeting:aTextField];
Comme le code ci-dessus est explicite, objOfClassA
est le récepteur . Mais aLabel
& aTextField
ne sont pas les expéditeurs . Parce qu'ils ne sont pas d'appeler la méthode. Ici, ils ne sont que les arguments. Ici, l'expéditeur réel est Class B
, mais aLabel
et aTextField
sont passés dans le (id)sender
argument. Quoi qu'il en soit le résultat de l'exécution de la méthode est identique.
Autres conseils
Peut-être que vous devriez vérifier un tutoriel Objective-C ( comme celui-ci ), comme cela est assez basique.
Le IBAction est défini comme étant « vide », il signifie que le procédé ne comporte pas de valeur de retour. Il est utile que pour Interface Builder, il sait que vos méthodes sont en fait une action que vous pouvez lier.
La partie (id) de l'expéditeur est un (seul) paramètre à votre méthode, qui est nommé expéditeur. (Id) indique que le type du paramètre peut être tout objet:
De Objective-C FAQ :
Qu'est-ce que est id?
Il est un type générique C qui utilise Objective-C pour un objet quelconque. [...]
IBAction
est un mot-clé (#define
'd à void
) que Interface Builder cherche dans votre code source, et si elle le trouve comme un type de retour, il ajouter à la liste des actions possibile vous pouvez câbler votre IB des éléments à.
id
est un type d'objet générique en Objective-C qui indique any objet Objective-C.
et sender
est juste le nom du paramètre id
typé.
Fonctionnellement disant: IBAction est un mot-clé pour identifier les méthodes que vous pouvez créer un lien vers par Interface Builder. (Id) expéditeur est nécessaire d'identifier l'objet déclenche la méthode dans le cas où vous utilisez la même méthode pour plusieurs contrôles.