2017-07-05 2 views
-1

I Apprentissage Swift et je comprends Protocole (Swift) Comme Interface (Java), mais je ne sais pas comment utiliser le protocole comme Interface (Auditeur) maintenant Comment l'utiliser dans Swift?Comment utiliser le protocole dans une méthode comme écouteur en Java

+0

Référez-https://stackoverflow.com/questions/27371194/set-action-listener-programmatically-in-swift – Akshay

+0

Dans la plupart des cas, vous ne seriez pas. Vous utiliseriez simplement une fermeture. (Lambda de Java sont une version plus restreinte de ceux-ci) – Alexander

+0

[J'espère que cela vous aidera] (https://www.youtube.com/watch?v=DBWu6TnhLeY) – Sandu

Répondre

0

Vous devez savoir qu'il n'y a pas de choses telles que les écouteurs d'actions dans iOS. Nous les appelons "délégués".

Par exemple, vous avez créé une vue appelée MyView et lorsque l'utilisateur peut déclencher trois événements différents en interagissant avec la vue.

Vous souhaitez informer le contrôleur lorsque ces événements se produisent. Vous créez donc un MyViewDelegate. Ceci est similaire à MyViewActionListener.

protocol MyViewDelegate { 
    func event1Occurred() 
    func event2Occurred() 
    func event3Occurred() 
} 

Dans votre classe MyView, vous ajoutez une propriété appelée delegate:

weak var delegate: MyViewDelegate? 

Pour définir l'auditeur de myView d'action, qui est une instance de MyView que vous avez créé à MyViewController, vous devez d'abord conformez MyViewController à MyViewDelegate:

class MyViewController: UIViewController, MyViewDelegate { 

} 

Ensuite, EXÉCUTIO nt les méthodes:

func event1Occurred() {} 
func event2Occurred() {} 
func event3Occurred() {} 

Ceci est similaire à la création d'une classe anonyme en Java:

MyViewActionListener listener = new MyViewActionListener() { 
    public void onEvent1() {} 
    public void onEvent2() {} 
    public void onEvent3() {} 
}; 

Et puis, vous attribuez self à myView.delegate:

myView.delegate = self 

Ceci est comme appeler setActionListener en Java:

myView.setActionListener(listener); 

à des moments appropriés MyView peut appeler ces méthodes de délégués:

delegate?.event1Occurred() 

Cela ressemble à:

if (actionListener != null) { 
    actionListener.onEvent1(); 
} 

Cependant, il existe d'autres moyens de le faire dans rapidement, comme la fermeture. Les fermetures sont similaires aux expressions lambda de Java, qui sont essentiellement des interfaces avec une seule méthode.

Une autre alternative consiste à utiliser le modèle de sélecteur de cible. Ceci est largement utilisé dans les API de l'objectif-C comme UIButton.

myButton.addTarget(self, selector: #selector(someFunc), for: .touchUpInside)