Хамелеон в программировании
Дженерики
В 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 предоставляет нам больше гибкости для определения наших собственных типов универсальных шаблонов в универсальных функциях. Пользовательские универсальные типы - это классы, перечисления и структуры, которые могут работать с любым типом, например с массивами и словарями.
- Реализация универсальных типов в основном осуществляется в структурах данных и в основном используется в стеке. Я уже обсуждал эту тему в своем предыдущем блоге. Вот ссылка, прочтите