2016-06-11 7 views
1

Ich habe mit diesem Problem meiner Meinung nach zu kämpfenKann nicht Allgemein Wert Protokoll associatedType Variable in einer Erweiterung zuweisen

Ich versuche, eine Bindungsstruktur auf Swift zu erstellen, Viewmodel und Steuerungen auf einfache Art und Weise zu binden. Also habe ich ein Protokoll erstellt, das eine Variable definiert, die auf dem Controller gespeichert werden soll.

protocol DVA_MOVVER_ViewControllerProtocolDelegate { 
    associatedtype delegateType : DVA_MOVVER_ViewModelProtocol 
    var dva_viewModelDelegate : delegateType? { get set } 
} 

Wie Sie sehen können, wird die Variable beschränkt ein anderes Protokoll zu erfüllen, das ist dieses:

protocol DVA_MOVVER_ViewControllerProtocol { 
    func dva_tellViewModel() 
    // Some other methods 
} 

ich die Controller-Klassen wollen nur die Variable zu implementieren, so dass es eine gespeicherte sein kann Variable. Ich kann das nicht mit einer Erweiterung erreichen.

Also, ich habe eine Erweiterung für das zweite Protokoll die Bindungen zu implementieren und eine gemeinsame Methode zu binden die Variable an die Steuerung

extension DVA_MOVVER_ViewControllerProtocol where Self:DVA_MOVVER_ViewControllerProtocolDelegate { 
    mutating func dva_bindViewModel<T:DVA_MOVVER_ViewModelProtocol>(parameter:T) { 

     typealias delegateType = T 
     self.dva_viewModelDelegate = parameter 
    } 
    ... 
    // The rest of the DVA_MOVVER_ViewControllerProtocol methods 
} 

Und hier ist, wo ich stecken geblieben zu erstellen. Der Compiler sagt "Kann Wert vom Typ 'T' dem Typ '_?' Nicht zuordnen". Ich nehme an, dies sein könnte, weil es nicht den Parametertyp zum Zeitpunkt der Kompilierung auflösen kann, aber ich habe keine Ahnung, wie diese zu lösen ...

Antwort