Хамелеон в программировании

Дженерики

В Swift Generics - это параметризованные типы. Используя дженерики, мы можем создавать гибкие и многократно используемые функции или методы, которые работают с любым типом. В быстром классе структура или любой метод, который работает с параметризованными типами, называется универсальными.

Как правило, быстро, используя дженерики, мы можем избежать дублирования кода, написав многоразовые функции или методы в ясной и абстрактной манере в соответствии с нашими требованиями.

Концепция универсальных шаблонов сильна в Swift, а стандартные библиотеки, такие как массивы или словари Swift, построены с использованием универсального кода. В Swift, когда мы создаем массив, он может содержать данные любого типа, такие как целые, строковые или любые другие типы, точно так же, как словари также используются для хранения любого типа данных в виде пары ключ-значение.

Вот простой пример неуниверсальной функции, который показывает, как универсальные функции помогут в языке программирования Swift.

В приведенном выше примере мы определили две функции swapInteger и swapString отдельно. Потому что функция swapInteger будет работать только для целых чисел, а swapString будет работать только для строк.

Когда мы запустим приведенный выше пример, вывод будет

After Swapping firstNumber: 3334, secondNumber: 445
After Swapping firstString: Orange, secondString: Apple

В быстром темпе, если мы используем неуниверсальный код, нам нужно создавать отдельные методы или функции в зависимости от типа данных, так как этот избыточный код будет увеличиваться в приложении.

Если мы используем дженерики, мы можем создать единственный метод или функцию, которая может обрабатывать данные любого типа.

Общие функции и параметры типов

В быстром темпе Generics будет работать с любым типом, для которого необходимо добавить ‹T› после имени функции.

Теперь мы реализуем общую версию для приведенного выше примера, которую мы использовали для обмена целыми числами и строками.

В приведенном выше примере мы определили одиночную функцию с универсальным заполнителем ‹T›, чтобы поменять местами значения любого типа, такие как integer, string, double.

Заполнитель T ничего не говорит, но он говорит, что оба a и b должны быть одного типа T , независимо от того, что представляет собой T. Фактический тип, используемый вместо T, определяется каждый раз, когда вызывается функция SwapValues ​​(_:, _:).

Мы можем вызвать функцию SwapValues ​​(), передав два значения любого типа, при условии, что оба этих значения относятся к одному типу.

Когда мы запустим приведенный выше код, вывод будет

After Swapping firstNumber: 3334, secondNumber: 445
After Swapping firstString: Orange, secondString: Apple

Основываясь на приведенном выше результате, мы можем однозначно сказать, что Generics поможет нам написать гибкий и многократно используемый код для выполнения наших операций в приложениях на основе наших требований.

  • Swift предоставляет нам больше гибкости для определения наших собственных типов универсальных шаблонов в универсальных функциях. Пользовательские универсальные типы - это классы, перечисления и структуры, которые могут работать с любым типом, например с массивами и словарями.
  • Реализация универсальных типов в основном осуществляется в структурах данных и в основном используется в стеке. Я уже обсуждал эту тему в своем предыдущем блоге. Вот ссылка, прочтите