2017-02-02 3 views
0

Ich habe Schwierigkeiten, einen Typkonflikt in swift mit Generika (und generischen Protokollen) zu lösen. Ich erhalte diesen Fehler, wenn ich versuche, eine Klassenfunktion innerhalb einer Operatorfunktion aufzurufen.Konflikt bei der Typkonvertierung mit generischen Protokollen in swift?

Cannot convert value of type 'Chain<Initial, E.Initial, E>'to expected argument of type 'Chain<Initial, E.Initial, E>' 

Im Folgenden finden Sie die Unterschrift und den Körper des Bedieners. Der Fehler wird als ein Typproblem deklariert, das der Klassenfunktion 'c' liefert.

public func +<Initial, E : Bindable>(c: Chain<Initial, E.Initial, E>, e: E) -> Chain<Initial, E.Result, E> { 
return Chain.append(chain: c, element: e) 
} 

Die Funktion Signatur (identisch mit der Operatorfunktion Signatur) der Kettenklasse append Funktion ist;

static func append<Initial, E : Bindable>(chain : Chain<Initial, E.Initial, E>, element: E) -> Chain<Initial, E.Result, E> 

Und das Bindable Protokoll wird als erklärt;

public protocol Bindable { 
    associatedtype Initial 
    associatedtype Result 
} 

Die Typen sind identisch, der Operator ist nur syntaktischer Zucker für die statische Klassenfunktion. Verwende ich falsch generische Protokolle? Oder ist das ein Typsystemfehler? Wo muss ich einfach den Klassenfunktionscode in den Operatorcode kopieren?

Antwort

0

Meine eigene Frage beantwortet: Ich musste nur eine Typ-Signatur für den Klassenfunktionsaufruf Chain.append (Kette: c, Element: e) bereitstellen.

Dies löste das Problem durch Bereitstellen von Kontext für den Methodenaufruf. Bevor es nicht wusste, welchen Typ es zurückgeben sollte.

Verwandte Themen