Какой принцип программирования реализуют Generics (обобщения)?

«Какой принцип программирования реализуют Generics (обобщения)?» — вопрос из категории ООП, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Суть: Тип становится параметром, который задаётся при использовании функции, структуры или класса.

Пример универсальной функции:

// T — параметр типа (Type Parameter)
func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
    let temporary = a
    a = b
    b = temporary
}

var someInt = 3, anotherInt = 107
swapTwoValues(&someInt, &anotherInt) // T выводится как Int

var someString = "hello", anotherString = "world"
swapTwoValues(&someString, &anotherString) // T выводится как String

Преимущества использования Generics:

  • Повторное использование кода: Одна реализация для множества типов.
  • Типобезопасность: Компилятор проверяет соответствие типов, исключая ошибки времени выполнения.
  • Улучшенная производительность: Избегает затрат на упаковку/распаковку (boxing), в отличие от использования типа Any.
  • Читаемость: Явно указывает на ожидаемые типы и их отношения.