0Pricing
Swift Academy · Урок

Обобщённые функции и типы

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

«Обобщённые функции и типы» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 3 уроков всего.

Зачем нужны обобщения

Обобщения позволяют написать одну функцию или один тип, работающие со многими типами и сохраняющие типобезопасность. Вы увидите обозначение параметра типа <T> и узнаете, как вывод типов упрощает вызовы.

Обобщённая функция

Обобщённая функция использует параметр типа (<T>). Компилятор проверяет типы при каждом вызове.

// Generic swap for any type T
func swapValues<T>(_ a: inout T, _ b: inout T) {
    let temp = a
    a = b
    b = temp
}

var x = 1, y = 2
swapValues(&x, &y)
print(x, y)  // 2 1

var s1 = "A", s2 = "B"
swapValues(&s1, &s2)
print(s1, s2) // B A

Обобщённый тип

Типы тоже могут быть обобщёнными: объявите Stack<Element> и используйте его повторно для целых чисел, строк и других типов.

// A minimal generic stack
struct Stack<Element> {
    private var items: [Element] = []
    mutating func push(_ x: Element) { items.append(x) }
    mutating func pop() -> Element? { items.popLast() }
    var top: Element? { items.last }
}

var intStack = Stack<Int>()
intStack.push(10); intStack.push(20)
print(intStack.top ?? -1)   // 20

var textStack = Stack<String>()
textStack.push("hi"); textStack.push("bye")
print(textStack.pop() ?? "?")

Вывод типов

Swift часто выводит обобщённые типы, поэтому при вызовах их редко требуется указывать явно.

// The compiler infers T from arguments/assignments
func makePair<T>(_ a: T, _ b: T) -> (T, T) { (a, b) }

let pair1 = makePair(1, 2)          // T inferred as Int
let pair2 = makePair("a", "b")      // T inferred as String
print(pair1, pair2)

Избегайте дублирования

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

// Non-generic overloads would duplicate logic:
func eqInt(_ a: Int, _ b: Int) -> Bool { a == b }
func eqStr(_ a: String, _ b: String) -> Bool { a == b }
// A single generic can replace both:

Примечания и именование

Примечания:

  • Используйте понятные имена: T, Element или названия из предметной области.
  • Делайте программные интерфейсы небольшими и целенаправленными.
  • Далее добавьте ограничения с помощью where, чтобы при необходимости ограничить T.

Значение &lt;T&gt;

Быстрая проверка: что означает <T> в обобщённой функции?

Итоги

Итоги: определяйте обобщённые функции с помощью <T> и создавайте обобщённые типы, например Stack<Element>. Swift выводит типы при вызовах, поэтому код остаётся повторно используемым и безопасным.

Часто задаваемые вопросы

Урок «Обобщённые функции и типы» бесплатный?

Да — полный текст урока «Обобщённые функции и типы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 3 уроков всего.

Чему я научусь в уроке «Обобщённые функции и типы»?

Пишите обобщённые функции и типы с параметрами типов (например, ). Узнайте, как компилятор выводит типы и обеспечивает безопасность и повторное использование кода. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.

Сколько времени занимает урок «Обобщённые функции и типы»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

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

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Обобщённые функции и типы
  2. Ограничения (where), выведение типов
  3. Обобщённые алгоритмы для коллекций
← Назад к Swift Academy