185 похожих чатов

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

именно в таком порядке выводится?

Наверное это связано с диспетчеризацией методов, но ведь самая быстрая - это статическая, а она есть у расширений, поэтому мне казалось,что первым должно быть "protocol foo"?

14 ответов

34 просмотра

Приоритет у класса будет

на какой уровень собесы проходишь?

Таня- Автор вопроса
khollsichek
Приоритет у класса будет

а почему вторым вывелся protocol bar,а не protocol foo?

Таня- Автор вопроса
Jeivi
на какой уровень собесы проходишь?

в том собесе не было заявлено уровня

Таня
а почему вторым вывелся protocol bar,а не protocol...

А почему protocol foo должно вывестись?

Таня- Автор вопроса
khollsichek
А почему protocol foo должно вывестись?

ну вроде как код исполняется сверху вниз?

Доброе утро! Не претендую на правильность ответа, но интересно стало В документации вот что нашел : Расширения протоколов могут добавлять реализацию к соответствующим типам данных, но не могут расширить протокол или унаследовать от другого протокола. Наследование протокола всегда указывается в самом объявлении протокола.

Это вопрос из серии, знаете ли вы подводные камни свифта. Если в протоколе не определена функция, но в расширении она есть (функция bar), то всегда будет вызвана именно эта реализация, даже если классы будут писать свою.

Таня- Автор вопроса
Vadim Shishkov
Это вопрос из серии, знаете ли вы подводные камни ...

да, я поняла, супер, спасибо что помогаете !

а тут проиходит следущие у константы указан тип протокол, компилятор смотрит на этот протокол идет в него видит метод, дальше идет в класс который реализует этот протокол видит там этот метод и реализует его, поэтому печает class foo

про это спрашивали ? почему так ? Я убрал только указание типа у констаны sample

Artur Dokhno
про это спрашивали ? почему так ? Я убрал только у...

тут компилятор сам определяет тип sample и определяет его как тип SampleClass а не SampleProtocol и идет в клаласс и реализует его метод bar, а не идет в протокол и ищет там метод bar, не находит его но видит расширение протокола и идет туда

Artur Dokhno
про это спрашивали ? почему так ? Я убрал только у...

вот как я тут убрал тип и вывело то что ты ожил бы =)

Добрый день, давайте попытаюсь поэтапно вам это объяснить 1) Вы объявили протокол в котором объявлена только функция foo но не объявлена функция bar 2) когда делаете расширение протокола то это означает если функция объявлена в протоколе и нет у неё body то это означает то что находиться в расширении это defoult значение которое сработает при вызове 3)Создаёться класс и наследуеться в вашего протокола и вы прописываете body от функции foo тем самым у вас не сработает defoult значение которое прописано у вас в расширении и в силу того что у вас в протоколе не объявлена функция bar то он заберёт ваше defoult значение которое у вас прописано в расширении следовательно у вас выйдет class foo которое вы переназначили и protocol bar которого у вас нет в протоколе и есть в расширении которое по сути как писал выше будет defoult значение

Похожие вопросы

Обсуждают сегодня

читать файл максимально быстро? странный вопрос))
zamtmn
53
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
17
или вы считаете муит дает знание?
супер_лох_3000 альфа версия
12
А кто такой мужчина в твоем понимании Азиз?
who?です 🐈
11
Ну значит тебе повезло, мы же про транк говорим оба?
Александр (Rouse_) Багель
11
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Всем ку. Подскажите, если задекларировал массив так: int arr[10] = {1, 2, 3, 4}, то в arr[4] будет мусор или нуль?
Sasha K
14
буквально один оставшийся вопрос при выполнении строчки mov eax, 5 операнд "5" будет присутствовать где-либо в памяти (любой), кроме как в памяти блока .code? подвопрос: как...
12
Карта сайта