Приведи пример использования Generics в Swift.

«Приведи пример использования Generics в Swift.» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Пример 1: Универсальная функция

// Функция меняет местами два значения любого типа
func swapValues<T>(_ a: inout T, _ b: inout T) {
    let temp = a
    a = b
    b = temp
}

var x = 5
var y = 10
swapValues(&x, &y) // Работает с Int
print(x, y) // 10 5

var str1 = "Hello"
var str2 = "World"
swapValues(&str1, &str2) // Работает с String
print(str1, str2) // World Hello

Пример 2: Универсальный тип (Generic Type)

// Универсальная структура Stack
struct Stack<Element> {
    private var items: [Element] = []

    mutating func push(_ item: Element) {
        items.append(item)
    }

    mutating func pop() -> Element? {
        return items.popLast()
    }
}

// Использование с разными типами
var intStack = Stack<Int>()
intStack.push(1)
intStack.push(2)
print(intStack.pop()!) // 2

var stringStack = Stack<String>()
stringStack.push("Swift")

Ключевые моменты:

  • T и Element — это параметры типа (type parameters), заполнители для реальных типов.
  • Компилятор подставляет конкретные типы, обеспечивая типобезопасность.
  • Generics устраняют необходимость дублирования кода для разных типов.