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 { } 

Dans le code ci-dessus, je reçois une erreur à ligne suivantehéritage Protocole Swift et numéro de conformité du protocole

extension DashboardPresenter: DashboardViewProtocol { } 

que, DashboardPresenter ne confirme pas le protocole DashboardViewProtocol, mais je l'ai déclaré weak var view: DashboardPresenterProtocol? dans DashboardPresenter . Bien que j'ai déclaré

Pourquoi ai-je cette erreur? S'il vous plaît laissez-moi savoir ce que je fais mal dans ce code.

Répondre

5

Vous ne pouvez pas implémenter une exigence de propriété en lecture-écriture de type BasePresenterProtocol? avec une propriété de type DashboardPresenterProtocol?. Réfléchissez à ce qui se passerait si ce était possible, et vous transmettez une instance de DashboardPresenter à DashboardViewProtocol. Vous seriez en mesure d'attribuer tout ce qui est conforme à BasePresenterProtocol à une propriété de type DashboardPresenterProtocol? - ce qui serait illégal.

Pour cette raison, une exigence de propriété en lecture-écriture a invariante (bien qu'il est intéressant de noter que l'exigence de propriété lisible ne doit pouvoir être covariante - but this currently isn't supported).

Bien que dans tous les cas, protocols don't conform to themselves, vous ne pouvez même pas utiliser DashboardPresenterProtocol? comme type qui est conforme à BasePresenterProtocol?.

+0

Merci Hamish! – Soni

+0

Heureux d'aider @Soni :) – Hamish