Вы, кажется, не понимаете, что такое протокол.Это просто контракт, гарантирующий, что его приемник содержит определенных членов.
Итак, давайте посмотрим на ваш код, который я немного изменил:
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()
.