Quelqu'un pourrait-il expliquer le sens de someViewController.delegate = self
et self.delegate
? Où nous aident-ils?
Délégués Envoyer des messages à vous.
Par exemple: Si vous utilisez le délégué de l'accéléromètre, vous obtiendrez des messages sur l'accéléromètre.
Si vous utilisez ce nouveau délégué de détection de neutrino, vous obtiendrez des messages sur les neutrinos détectés dans la région.
Si vous utilisez des popups, les popups vous envoient des messages. Et la façon dont cela est fait est avec le délégué du popup. Il y a beaucoup de nombreux exemples.
Donc, les délégués envoient des messages.
C'est si simple.
Vous pourriez demander: "Où envoie-t-il ces messages?"
La réponse est la suivante: il envoie les messages à l'endroit où vous définissez le thingy ".Delegate".
Lorsque vous "définir le délégué", ce que vous faites, c'est dire où vous voulez que les messages vont.
D'où,
bla.delegate = incroyableplace enverra les messages à "étonnantPLACE".
bla.delegate = quelque partelse enverra les messages à "quelque partelle".
bla.delegate = Self Enverra les messages ...... à vous.
Très souvent, vous voulez que les messages viennent à "toi", alors vous dites simplement "bla.delegate = moi"
C'est une erreur très courante, d'oublier cette ligne de code.
Si vous oubliez cette ligne de code, vous êtes bourré. Les messages vont nulle part, et vous êtes laissé à gratter votre tête en essayant de comprendre ce qui s'est mal passé.
Quelque chose d'autre que vous devez faire: lorsque vous utilisez un délégué, vous devez annoncer à l'avance que vous souhaitez utiliser le délégué.
Comment faire ça?
Dans les vieux jours avec Objective-C, vous venez de faire cela ...
@interface AppDelegate_Pad : NSObject <UIApplicationDelegate>
@interface BigTop : UIViewController <ASIHTTPRequestDelegate,
UIPopoverControllerDelegate>
@interface Flying : UIViewController <UIAccelerometerDelegate>
Vous pouvez voir que "Bigtop" veut utiliser deux délégués, à savoir l'ASIHTPEQUESTDELEGATE et l'UIPOPOVERCONTROLLERDELEGATE. Alors que "Flying" ne veut que utiliser un délégué - il veut utiliser l'accéléromètre.
à Swift, cela ne pourrait pas être plus facile - vous avez juste une virgule puis les protocoles:
class YourClass:UIViewController, SomeDelegate, AnotherDelegate
Vous ne pouvez pas vraiment faire beaucoup sur l'iPhone sans utiliser de délégués partout.
Les délégués sont utilisés partout et tout le temps dans IOS.
Il est parfaitement normal qu'une classe puisse utiliser une douzaine de délégués.
Dans l'exemple de "vol" ci-dessus, quelque part dans le code de "vol" aurait à dire ...
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
Dans le cas de Bigtop, il faudrait définir le délégué quelque part pour les qualités ASIHTTPEQUEST,
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:gid forKey:@"gid"];
[request setPostValue:nom forKey:@"nom"];
[request setDelegate:self];
(N'oubliez pas dans les vieux jours avec Objective-C, x.delegate=self
était exactement la même chose que [x setDelegate:self]
.)
De nos jours avec Swift vous tapez simplement
x.delegate = self
et c'est tout ce qu'il y en a.
C'est ce que tu fais. Délégués Envoyer des messages. Vous devez dire où vous voulez que les messages vont. Très typiquement, vous voulez qu'ils vont à "vous", donc dans ce cas, vous dites simplement x.delegate=self
.
J'espère que ça aide.