2017-01-07 3 views
1

Ich fand heraus, dass die zugehörigen Typen ein bisschen Swift für mich kompliziert, vor allem, weil ich Java-Ansatz im Auge behalten.Protokolle mit zugehörigem Typ in Swift 3

Mein Problem ist, dass ich einfache Schnittstelle (oh, rechts, Protokoll), die wie folgt aussehen könnte erstellen möchten:

protocol Sender { 

    associatedtype Data 

    func send(data: Data) 
} 

In Java es würde wie folgt aussehen:

class Sender<T> { 

    void send(T data); 

} 

Und jetzt möchte ich dieses Protokoll als Methodenparameter verwenden, aber ich weiß nicht, wie ich es in Swift machen kann, aber in Java würde es so aussehen;) (String type als Beispiel)

void addSender(Sender<String> sender) { 
     // do something 
} 

Wie kann ich dies mit Swift erreichen?

Antwort

3

Man könnte so etwas wie

func addSender<T: Sender>(_ sender: T) where T.Data == String { 

} 

Ich bin nicht sicher schreiben, wenn es eine kürzere Alternative ist diese Arbeit zu machen.

A Sender Implementierung für String s könnte wie folgt aussehen:

class StringSender : Sender { 
    //typealias Data = String  <- This can be inferred from the parameter type of send 

    func send(data: String) { 
     // Send a string 
    } 
} 
Verwandte Themen