TGViewer
Vadim Chistiakov | IT Vadim Chistiakov | IT @ios_mobile_developer · 2.17K subscribers
Post #99 2.4K
Method dispatch

Про то, как устроена диспетчеризация методов в Swift написано не мало, поэтому я не хочу повторяться в пересказе. Детально погрузиться или повторить все аспекты, предлагаю за просмотром видео Swift Mehtod Dispatch. Статей, где подробно объясняется зачем и почему в Swift сосуществуют различные типы нахождения и вызовов методом предостаточно, например, вот. Вообще говоря, большого прикладного применения я в этом не вижу, но понимать базово все же стоит.

Разберем несколько "tricky" примеров-вопросов с собеседований, которые могут действительно застать врасплох.
 
На первом скрине, у нас есть вызов метода сначала у структуры, а затем у структуры приведенной к протоколу. В случае если метод определен только в расширении протокола, мы получим ответы:
// In Struct
// In Protocol
Будет использована Static dispatch для метода из расширения протокола.
 
Если же мы добавим метод и в объявление протокола, то будет применен Witness table (скрин 2) и ответ станет:
// In Struct
// In Struct
 
На третьем скрине ситуация посложнее. Метод определен в протоколе и в его расширении. Есть класс B, который реализует протокол, но не перегружает метод из него. И есть класс С потомок класса B и переопределенный метод из протокола P. При вызове метода у класса С приведенного к протоколу, логично предполагать, что будет вызван переопределенный метод из класса С, но мы получаем вызов метода из расширения протокола 🤯.

Баг открыт много лет и пока не был поправлен. Собственно, как можно его закостылись смотреть там же)

#ios #swift #interview
  • 🔥 7
  • 👍 4
  • 👏 2
  • 🤡 2
More from @ios_mobile_developer
  1. Sep 15, 2026На днях я получил ПМЖ Великобритании 👑. Этот путь занял 2 года и 10 месяцев. Вообще, это…
  2. Sep 2, 2026Давно тебя не было в Уличных Гонках ... Начну с базы - покупка машины в Лондоне - это глуб…
  3. Aug 21, 2026Как я вижу своего подписчика на Boosty 💰 Идеальный подписчик для меня не тот, у кого опре…
  4. Aug 10, 2026Возврат машины 🚘 Покупка машины лидировала в опросе, но база собесов все-таки ее обошла,…
  5. Aug 5, 2026Post #268
  6. Aug 5, 2026Летний пост 😎 Не писал сюда несколько месяцев, было как-то плотно по работе, менторству и…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →