Концепция делегирования протокола с базовым классом - PullRequest
0 голосов
/ 17 мая 2019

У меня есть сомнения, связанные с методом протокола и методом класса. код ниже объясните, чего я хочу достичь,

protocol Test {
    func abc()
}

class Base {
    func abc() { }
}

class MyCustomClass: Base, Test {

}

Итак, вопрос в том, какой метод MyCustomClass добавит?

В моем сценарии я хочу добавить Test метод протокола, а также метод базового класса. на данный момент это позволяет мне добавлять Base метод класса с ключевым словом override.

Итак, кто-нибудь знает, как мы можем получить доступ к Test Protocol и Base Class?

Возможно ли получить оба метода в MyCustomClass, которые содержат одно и то же имя метода?

1 Ответ

1 голос
/ 17 мая 2019

Вы, кажется, не понимаете, что такое протокол.Это просто контракт, гарантирующий, что его приемник содержит определенных членов.

Итак, давайте посмотрим на ваш код, который я немного изменил:

protocol Test {
    func abc()
}

class Base {
    func abc() { print("Base abc") }
}

class MyCustomClass: Base, Test {

}

Важная вещь в вашем коде состоит в том, что компилируется .Зачем?Приняв Test, MyCustomClass обещает, что он содержит функцию abc().И это выполняет это обещание.Как?Унаследовав функцию abc() от ее суперкласса Base.

Что касается "того, что происходит", просто попробуйте:

MyCustomClass().abc() // Base abc

Мы создаем экземпляр MyCustomClass, вызываем abc() этого экземпляра,и, конечно же, abc(), унаследованный от базовых прогонов, в соответствии с законами полиморфизма.

Но это никак не связано с протоколом!Протокол не имеет значения и здесь не имеет смысла.Вы можете полностью удалить протокол из примера и получить точно такой же результат.Протокол - это просто описание его приемника.Там написано, что «тот, кто меня примет, имеет функцию abc()», и, конечно же, MyCustomClass принимает протокол, а имеет функцию abc().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...