2016-11-03 2 views
1
protocol BasePresenterProtocol : class {} 
protocol DashboardPresenterProtocol : BasePresenterProtocol {} 

final class DashboardPresenter { 
    weak var view: DashboardPresenterProtocol? 

    init() { 
     self.view = DashboardViewController() 
    } 

    func test() { 
     print("Hello") 
    } 
} 

extension DashboardPresenter: DashboardViewProtocol { } 

protocol BaseViewProtocol : class { 
    weak var view: BasePresenterProtocol? { get set } 
} 

protocol DashboardViewProtocol : BaseViewProtocol { 
} 

class DashboardViewController { 
} 

extension DashboardViewController: DashboardPresenterProtocol { } 

In dem obigen Code, erhalte ich einen Fehler in Zeile folgendenSwift Protocol Vererbung und Protokollkonformität Ausgabe

extension DashboardPresenter: DashboardViewProtocol { } 

, die nicht DashboardPresenter nicht zu Protokoll bestätigen DashboardViewProtocol, aber ich habe weak var view: DashboardPresenterProtocol? erklärt in DashboardPresenter . Obwohl ich

erklärt habe Warum erhalte ich diesen Fehler? Bitte lassen Sie mich wissen, was ich in diesem Code falsch mache.

Antwort

5

Sie können keine Anforderung für Lese-/Schreibeigenschaften des Typs BasePresenterProtocol? mit einer Eigenschaft des Typs DashboardPresenterProtocol? implementieren.

Denken Sie darüber nach, was, wenn diese waren möglich passieren würde, und Sie upcast eine Instanz von DashboardPresenter-DashboardViewProtocol. Sie könnten alles, was BasePresenterProtocol entspricht, einer Eigenschaft des Typs DashboardPresenterProtocol? zuweisen - was illegal wäre.

Aus diesem Grunde ist eine Schreib-Lese-Eigenschaft Anforderung unveränderlich sein muss (obwohl es ist erwähnenswert, dass eine lesbare geschützte Eigenschaft Anforderung der Lage sein sollte covariant sein - but this currently isn't supported).

Obwohl in jedem Fall protocols don't conform to themselves, so können Sie nicht einmal DashboardPresenterProtocol? als ein Typ verwenden, der BasePresenterProtocol? entspricht.

+0

Danke Hamish! – Soni

+0

Gerne helfen @Soni :) – Hamish

Verwandte Themen