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

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

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

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

14 ответов

92 просмотра

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

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

Таня- Автор вопроса
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 значение

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
9
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Карта сайта