Как реализовать в протоколе конкретный c тип протокола - PullRequest
0 голосов
/ 17 июня 2020

У меня есть протокол с именем ViperPresenterProtocol, который содержит протокол свойств с именем ViperInteractorProtocol.

Теперь я хочу иметь другой протокол, который расширяет ViperPresenterProtocol и возвращает другой тип. Но когда класс подтверждает TestPresenterProtocol, я хочу реализовать только TestInteractorProtocol.

protocol ViperInteractorProtocol {}
protocol TestInteractorProtocol: ViperInteractorProtocol {}

protocol ViperPresenterProtocol {
    var interactor: ViperInteractorProtocol? { get set }
}

protocol TestPresenterProtocol2: ViperPresenterProtocol {
    var interactor: TestInteractorProtocol? { get set }
}

class TestPresenter: TestPresenterProtocol {
    var interactor: TestInteractorProtocol?  //  Compile error
    var interactor: ViperInteractorProtocol?  //
}

1 Ответ

0 голосов
/ 17 июня 2020

Создание дочернего протокола TestPresenterProtocol расширения его определения и соответствия требованиям родительского протокола позволит вам создать класс, который соответствует дочернему протоколу, чтобы иметь требования только для дочернего протокола, а не родительского протокола . Единственное требование, которое необходимо для этого, - это то, что компилятор должен различать guish между свойствами. С таким же именем в данном случае interactor сбивает компилятор с толку. Надеюсь, это поможет вам в какой-то мере.

protocol ViperInteractorProtocol { }
protocol TestInteractorProtocol: ViperInteractorProtocol { }

protocol ViperPresenterProtocol {
    var interactor: ViperInteractorProtocol? { get set }
}

protocol TestPresenterProtocol: ViperPresenterProtocol {
    var testInteractor: TestInteractorProtocol? { get set }
}

extension TestPresenterProtocol {
    var interactor: ViperInteractorProtocol? {
        set { interactor = newValue }
        get { testInteractor }
    }
}

class TestPresenter: TestPresenterProtocol {
    var testInteractor: TestInteractorProtocol?
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...