Приоритет у класса будет
на какой уровень собесы проходишь?
а почему вторым вывелся protocol bar,а не protocol foo?
в том собесе не было заявлено уровня
А почему protocol foo должно вывестись?
ну вроде как код исполняется сверху вниз?
Доброе утро! Не претендую на правильность ответа, но интересно стало В документации вот что нашел : Расширения протоколов могут добавлять реализацию к соответствующим типам данных, но не могут расширить протокол или унаследовать от другого протокола. Наследование протокола всегда указывается в самом объявлении протокола.
Это вопрос из серии, знаете ли вы подводные камни свифта. Если в протоколе не определена функция, но в расширении она есть (функция bar), то всегда будет вызвана именно эта реализация, даже если классы будут писать свою.
да, я поняла, супер, спасибо что помогаете !
а тут проиходит следущие у константы указан тип протокол, компилятор смотрит на этот протокол идет в него видит метод, дальше идет в класс который реализует этот протокол видит там этот метод и реализует его, поэтому печает class foo
про это спрашивали ? почему так ? Я убрал только указание типа у констаны sample
тут компилятор сам определяет тип sample и определяет его как тип SampleClass а не SampleProtocol и идет в клаласс и реализует его метод bar, а не идет в протокол и ищет там метод bar, не находит его но видит расширение протокола и идет туда
вот как я тут убрал тип и вывело то что ты ожил бы =)
Добрый день, давайте попытаюсь поэтапно вам это объяснить 1) Вы объявили протокол в котором объявлена только функция foo но не объявлена функция bar 2) когда делаете расширение протокола то это означает если функция объявлена в протоколе и нет у неё body то это означает то что находиться в расширении это defoult значение которое сработает при вызове 3)Создаёться класс и наследуеться в вашего протокола и вы прописываете body от функции foo тем самым у вас не сработает defoult значение которое прописано у вас в расширении и в силу того что у вас в протоколе не объявлена функция bar то он заберёт ваше defoult значение которое у вас прописано в расширении следовательно у вас выйдет class foo которое вы переназначили и protocol bar которого у вас нет в протоколе и есть в расширении которое по сути как писал выше будет defoult значение
Обсуждают сегодня