Ich muss eine Schnittstelle als Parameter an eine Funktion übergeben. Schnittstelle ist generisch a.k.a hat einen zugeordneten Typ. Ich konnte keinen guten Weg finden, das zu tun. Hier ist mein Code:Wie Protokoll mit zugehörigem Typ (generisches Protokoll) als Parameter in Swift?
protocol IObserver : class {
typealias DelegateT
...
}
class Observer: IObserver {
typealias DelegateT = IGeneralEventsDelegate // IGeneralEventsDelegate is a protocol
...
}
func notify(observer: IObserver) { ... } // here I need a type for observer param
fand ich, dass dies funktionieren wird:
func notify<T: IObserver where T.DelegateT == IGeneralEventsDelegate>(observer: T) { ... }
, sondern kommen auf das zu kompliziert ist. Was, wenn ich diesen Parameter in der Klassenvariablen speichern möchte, sollte ich die ganze Klasse generisch machen, nur wegen dieser Funktion.
Es ist wahr, dass ich C++ Entwickler und ich bin neu in der Swift Sprache, aber die Art, wie die Dinge getan werden, ist viel zu kompliziert und benutzerunfreundlich ... oder ich bin zu blöd :)
glaube ich auch jedes Mal. Unannehmlichkeit wirklich. In Bezug auf C++ denke ich Swifts "Protokoll" sieht aus wie "Konzept". Und eine "Erweiterung" mit einem Typ, der einem "Protokoll" entspricht, ist ähnlich wie "Konzeptkarte". Diese Einrichtungen sind nützlich, um kompilierungszeitlichen Polymorphismus zu realisieren. In vielen Fällen wünschen wir uns jedoch einen Mechanismus wie 'pure virtual class' +' multiple vererbung', entspricht Javas 'interface', um Laufzeitpolymorphie zu realisieren. Aber Swift könnte keine Mechanismen haben, die diesen für generische Typen entsprechen. – findall
Siehe meine diesbezügliche Antwort hier --- --- http://stackoverflow.com/a/34995198/5389500 – eonist