TGViewer
Пепега Девелопмент Пепега Девелопмент @pepega_development · 203 subscribers
Post #18 411
Приветы всем! Расскажу сегодня про одну неофициальную фичу Свифта.

Пусть у нас есть 2 протокола, у которых, так уж вышло, есть одинаковый по названию метод.

protocol A {
func kek()
}

protocol B {
func kek()
}


И мы хотим иметь 2 различные реализации этого метода в 1 классе:

class Pepega: A, B {
func kekForA() { print("a") }
func kekForB() { print("b") }
}


Для решения этой задачи можно применить аттрибут @_implements(ProtoName, ProtoMethod). Получится так:

class Pepega: A, B {
@_implements(A, kek())
func kekForA() { print("a") }

@_implements(B, kek())
func kekForB() { print("b") }
}


Далее при использовании сущности под соотвующим интерфейсом у нас будет меняться вывод:

let pepega = Pepega()

let a = pepega as A
let b = pepega as B

a.kek() // тут будет a
b.kek() // тут уже будет b


Аттрибут не является приватным (= запрещённым) API. Это фича на уровне компилятора. Единственная опасность – отсутствие гарантий выпила в след. версии компилятора (что кмк фигня).

Очевидно такие вещи не нужно юзать по любому поводу. Идеальное решение – конечно же переименовать метод. Только это не всегда возможно: протокол может идти из библиотеки, он может юзаться в 100500 местах (рефакторинг в икскоде, гы) либо нам просто лень 💡 .
  • 👍 11
  • 🔥 2
  • 👏 1
  • 😨 1
More from @pepega_development
  1. Sep 25, 2026С пятницей 🎧
  2. Sep 24, 2026Дарова 🕺 ОпенАи недавно зарелизили очередные обновления моделей. Не собираюсь вдаваться в…
  3. Aug 19, 2026У меня есть привычка иногда просматривать логи работы нейронки. Полезно понимать, использу…
  4. Jul 31, 2026Большую часть времени я пользуюсь Opus High для решения задач. Стал замечать, что как будт…
  5. Jul 21, 2026Халоу, халоу! Чуть про харнесс аишный расскажу! 🥂 Харнесс – это, грубо говоря, тулинг вок…
  6. Jul 10, 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 →