Обобщённые функции и типы
Пишите обобщённые функции и типы с параметрами типов (например, ). Узнайте, как компилятор выводит типы и обеспечивает безопасность и повторное использование кода.
«Обобщённые функции и типы» — бесплатный урок 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.
Значение <T>
Быстрая проверка: что означает <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 — локальная установка не требуется.
Все уроки этого курса
- Обобщённые функции и типы
- Ограничения (where), выведение типов
- Обобщённые алгоритмы для коллекций