Comment fait-on pour faire un délégué, c'est- NSUserNotificationCenterDelegate
à- dire rapidement?
delegates
swift
delegation
utilisateur3718173
la source
la source
Réponses:
Ce n'est pas si différent de obj-c. Tout d'abord, vous devez spécifier le protocole dans votre déclaration de classe, comme suit:
La mise en œuvre ressemblera à ceci:
Bien sûr, vous devez définir le délégué. Par exemple:
la source
@interface MyCustomClass: UIViewController <ClassIWantToUseDelegate>
, vous permettant d'initier / configurer le viewcontroller, ainsi que d'appeler des méthodes de délégué sur les sous-vues? Quelque chose de semblable à ce ?Voici une petite aide sur les délégués entre deux contrôleurs de vue:
Étape 1: Créez un protocole dans l'UIViewController que vous supprimerez / enverrez les données.
Étape 2: Déclarez le délégué dans la classe d'envoi (c'est-à-dire UIViewcontroller)
Étape 3: utilisez le délégué dans une méthode de classe pour envoyer les données à la méthode de réception, qui est toute méthode qui adopte le protocole.
Étape 4: Adoptez le protocole dans la classe de réception
Étape 5: implémenter la méthode déléguée
Étape 6: définissez le délégué dans prepareForSegue:
Et cela devrait fonctionner. Il ne s'agit bien sûr que de fragments de code, mais cela devrait vous donner une idée. Pour une longue explication de ce code, vous pouvez consulter mon article de blog ici:
segues et délégués
Si vous êtes intéressé par ce qui se passe sous le capot avec un délégué, j'ai écrit à ce sujet ici:
sous le capot avec des délégués
la source
weak
n'est nécessaire que pour les classes et non pour les structures et les énumérations. Si le délégué doit être une structure ou une énumération, vous n'avez pas à vous soucier des cycles de conservation. Cependant, le délégué est une classe (cela est vrai dans de nombreux cas car il s'agit souvent d'un ViewController), alors vous avez besoinweak
mais vous devez déclarer votre protocole en tant que classe. Il y a plus d'informations ici stackoverflow.com/a/34566876/296446Les délégués m'ont toujours confondu jusqu'à ce que je réalise qu'un délégué n'est qu'une classe qui fait du travail pour une autre classe . C'est comme avoir quelqu'un d'autre là pour faire tout le sale boulot que vous ne voulez pas faire vous-même.
J'ai écrit une petite histoire pour illustrer cela. Lisez-le dans un Playground si vous le souhaitez.
Il était une fois...
En revue, il y a trois parties clés pour créer et utiliser le modèle de délégué.
Vrai vie
Par rapport à notre histoire Bossy Big Brother ci-dessus, les délégués sont souvent utilisés pour les applications pratiques suivantes:
La grande partie est que ces classes n'ont pas besoin de se connaître au préalable, sauf que la classe déléguée est conforme au protocole requis.
Je recommande vivement la lecture des deux articles suivants. Ils m'ont aidé à comprendre les délégués encore mieux que la documentation .
Encore une note
Les délégués qui référencent d'autres classes qu'ils ne possèdent pas doivent utiliser le
weak
mot - clé pour éviter des cycles de référence forts. Voir cette réponse pour plus de détails.la source
J'ai quelques corrections à publier sur @MakeAppPie
Tout d'abord, lorsque vous créez un protocole délégué, il doit être conforme au protocole de classe. Comme dans l'exemple ci-dessous.
Deuxièmement, votre délégué doit être faible pour éviter le cycle de rétention.
Enfin, vous êtes en sécurité car votre protocole est une valeur facultative. Cela signifie que son message "nil" ne sera pas envoyé à cette propriété. C'est similaire à l'instruction conditionnelle avec
respondToselector
dans objC mais ici vous avez tout sur une seule ligne:Ci-dessus, vous avez un exemple obj-C et ci-dessous vous avez un exemple Swift de son apparence.
la source
delegate?.myMethod
ne plantera pas parce que si le délégué estnil
alors rien ne se passerait. Toutefois , si vous avez fait erreur et écrit quedelegate!.myMethod
vous pourriez tomber en panne si un délégué n'est pas défini, il est donc essentiellement un moyen pour vous d'être en sécurité ...Voici l' essentiel que j'ai mis en place. Je me demandais la même chose et cela a aidé à améliorer ma compréhension. Ouvrez-le dans un Xcode Playground pour voir ce qui se passe.
la source
UIViewController
classe conforme au délégué que nous avons créé? Doivent-ils être déclarés dans un seul fichier swift? Toute aide signifiera beaucoup.class ViewController : UIViewController NameOfDelegate
.a.swift
fonction de votre réponse ci-dessus, cela ne vient pasb.swift
. Je ne peux accéder à aucune classe en dehors de mon fichier swift. des durs?DÉLÉGUÉS DANS SWIFT 2
J'explique avec l'exemple de Delegate avec deux viewControllers.Dans ce cas, SecondVC Object renvoie des données au premier View Controller.
Classe avec déclaration de protocole
Dans First ViewController Protocol, la conformité se fait ici:
Définition de la méthode de protocole dans First View Controller (ViewController)
Pendant la poussée du SecondVC à partir du contrôleur First View (ViewController)
la source
Première classe:
Seconde classe:
la source
Type 'ViewController' does not conform to protocol 'NetworkServiceDelegate'
suggérée par plz. C'est mon 6ème jour sur Swift :)Très facile étape par étape (100% fonctionnel et testé)
étape1: créer une méthode sur le premier contrôleur de vue
étape2: définir le délégué tout en poussant vers le deuxième contrôleur de vue
étape3: définir le délégué comme
classe ViewController: UIViewController, ProcessStatusDelegate {
étape 4: créer un protocole
step5: prendre une variable
Étape 6: Tout en revenant à la méthode de délégué d'appel du contrôleur de vue précédente, le contrôleur de vue doit d'abord notifier avec des données
la source
Exemple simple:
la source
Les délégués sont un modèle de conception qui permet à un objet d'envoyer des messages à un autre objet lorsqu'un événement spécifique se produit. Imaginez qu'un objet A appelle un objet B pour effectuer une action. Une fois l'action terminée, l'objet A doit savoir que B a terminé la tâche et prendre les mesures nécessaires, cela peut être réalisé avec l'aide de délégués! Voici un tutoriel implémentant les délégués étape par étape dans Swift 3
Lien du didacticiel
la source
Les solutions ci-dessus semblaient un peu couplées et en même temps évitent de réutiliser le même protocole dans d'autres contrôleurs, c'est pourquoi je suis venu avec la solution qui est plus forte typée en utilisant l'effacement de type générique.
sortie : nouvelle valeur newValue
la source
Dans Swift 4.0
Créer un délégué sur la classe qui doit envoyer des données ou fournir des fonctionnalités à d'autres classes
Comme
Après cela dans la classe qui va confirmer à ce délégué
la source