Comments 13
Итак, у вью-контроллера есть сильная ссылка на блоггера:
let bloger = Bloger()
А у блоггера есть массив с сильными ссылками на наблюдателей:
private lazy var subscribers : [Subscriber] = []
И в этот массив мы кладем ссылку на вью-контроллер.
Привет retain-cycle. )))
Почему модно говорить "подписывать на протокол" вместо "реализовать протокол"? Второй год уже эту шляпу вижу. Откуда это взялось, мне интересно? Conform(implement) vs Subscribe.
При этом особо забавно, что описываем паттерн наблюдатель и используем термин subscriber, подписчик :-)
protocol MyProtocol {}
extension MyProtocol {
func print() {
Swift.print(self)
}
}
class MyClass: MyProtocol {}
Класс подписался или реализовал протокол?
Если уж говорить про расширение функционала типов через экстеншены, то это ничем не отличается от простого написания в декларации этого типа. То, что ниже — идентично с той лишь разницей, что в екстеншене вы не сможете объявить хранимые свойства:
class A: P {}
class A {}
extension A: P {}
То, что вы добавляете протоколу с помощью экстеншенов не относится к типам, реализующих этот протокол.
Ну или объясните мне семантику термина «подписаться на протокол» :-)
Все ты верно говоришь, ни в одном учебнике на английском не читал «subscribe to the protocol”, есть только implement или conform. Если хочешь узнать откуда это взялось у русских - открой учебник по Swift 5.0 и попробуй поискать по ключу “подписанный”.
Вы не русский?
Я считаю что «подписаться» для новичка звучит проще. Но это семантически неверно.
Кратко: наследование и расширение функционала (называется traits) — совсем разные вещи. Не говоря уже о подписке. Могу подписаться на нетфликс, например, или на уведомления от сервиса, но на протокол — не умею.
Паттерн Observer в Swift