Что это такое и как мы можем реализовать это в Swift?

Полиморфизм — важный инструмент для использования в объектно-ориентированных программах. Но что это такое и как мы можем использовать эту языковую функцию Swift?

Предпосылки:

  • Классы, структуры и немного идеи наследования
  • Идея о том, что абстрактные классы выполняют контракты

Терминология

Полиморфизм: это способность объекта принимать множество форм, при этом обычно используется ссылка на родительский класс для ссылки на объект дочернего класса.

Наследование: возможность наследовать атрибуты и методы от другого класса.

Мотивация

У вас есть суперкласс животного, которое может издавать звуки. Подклассы животных имеют собственную реализацию звука (для выполнения контракта быть животным). Это означает, что со свиньей можно обращаться как со свиньей или как с животным, в зависимости от ваших требований.

Пример

Мы можем сделать именно это. У нас есть классы свиньи и собаки, которые наследуются от животных и реализуют звук животных соответственно. Мы можем преобразовать в общий тип.

Протоколы

Можно ли сделать то же самое с протоколами в Swift?

Что ж. да. Да, это. Обратите внимание, что полиморфизм, применяемый к протоколам, также может быть применен к структурам, что делает его очень гибким способом применения полиморфизма при кодировании на Swift.

Кстати, это также работает неявно, то есть для массива нам не нужно объявлять тип для нашего массива.

Итак, в приведенном выше примере:

var arr = [a,b]

Работает отлично.

Понижение

В любом случае (полиморфизм наследования или полиморфизм протокола) мы можем использовать понижающее приведение из массива.

Следующий пример не очень хороший, но он работает.

Хотите связаться? Попробуйте ссылку здесь: