Comments 5
Очень радует, что в отличие от obj-c в Swift можно в расширении класса MyViewController указать новые наследуемые протоколы и реализовать их поведение.
Учитывая, что эти расширения, суть, симбиоз протоколов и категорий, все это в obj-c можно делать. Протоколы наследуют протоколы. Категории наследуют и реализуют протоколы.
Выглядит забавно и любопытно, но, честно, никогда не сталкивался с необходимостью расширений, которые не привязаны к какому-то типу. Больше похоже на синтаксический сахар для helper-функций и методов. Называть это прям какой-то новой парадигмой protocol-oriented язык не поворачивается
0
В obj-c не сделаешь миксинов, как вы и описали — протоколов не привязанных к типу.
Зачем они могут быть нужны?
Самый явный пример — уточнение дженериков.
Если не вдаваться в библиотеки (мы, например, очень любим писать расширения к generic сущности SignalProducer из ReactiveCocoa) — то в коде встречались расширения на Optional на конкретные типы.
Пример — единообразный анврап Optional объекта (замена конструкции value = optional ?? fallbackValue на какую-то единообразную optional.unwrap, которая предпочтительнее, чем unwrap(optional)). Для того чтобы его написать — нужно уметь строить fallbackValue — что можно сделать только для какого-то набора типов.
Зачем они могут быть нужны?
Самый явный пример — уточнение дженериков.
Если не вдаваться в библиотеки (мы, например, очень любим писать расширения к generic сущности SignalProducer из ReactiveCocoa) — то в коде встречались расширения на Optional на конкретные типы.
Пример — единообразный анврап Optional объекта (замена конструкции value = optional ?? fallbackValue на какую-то единообразную optional.unwrap, которая предпочтительнее, чем unwrap(optional)). Для того чтобы его написать — нужно уметь строить fallbackValue — что можно сделать только для какого-то набора типов.
0
Я дико извиняюсь, но всё же рискну спросить: а что в данном контексте есть протокол?
0
Может быть это как интерфейс из ООП.
0
Собственно без контекстов, протоколом считаю протокол, как его описывает Apple:
Но в принципе его можно рассматривать как некоторый миксин, так как по факту (как показано в статье, например, в примере 2) можно «вливать» новых функционал в существующий класс и делать это неоднократно.
A protocol defines a blueprint of methods, properties, and other requirements that suit a particular task or piece of functionality. The protocol can then be adopted by a class, structure, or enumeration to provide an actual implementation of those requirements. Any type that satisfies the requirements of a protocol is said to conform to that protocol.
Но в принципе его можно рассматривать как некоторый миксин, так как по факту (как показано в статье, например, в примере 2) можно «вливать» новых функционал в существующий класс и делать это неоднократно.
+1
Sign up to leave a comment.
Swift! Protocol Oriented