Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Swift : swift, protocol

Что такое Associated Type в протоколах?

Вопрос проверяет понимание обобщенного программирования (generics) в контексте протоколов Swift.

Короткий ответ

Associated Type (ассоциированный тип) — это заполнитель для конкретного типа, который протокол не определяет заранее. Тип указывается при принятии протокола классом или структурой. Это позволяет создавать гибкие протоколы, которые могут работать с разными типами данных, не привязываясь к одному.

Длинный ответ

Ассоциированные типы делают протоколы обобщенными (generic). Они объявляются с помощью ключевого слова associatedtype.

Базовый пример:

// Протокол контейнера, который может хранить элементы неизвестного пока типа.
protocol Container {
    // Ассоциированный тип. Реализация протокола сама решит, каким он будет.
    associatedtype Item
    var count: Int { get }
    mutating func append(_ item: Item)
    subscript(i: Int) -> Item { get }
}

// Принятие протокола. `Item` становится `Int`.
struct IntStack: Container {
    typealias Item = Int // Эта строка необязательна, компилятор выведет тип сам.
    var items = [Int]()
    var count: Int { return items.count }
    mutating func append(_ item: Int) {
        items.append(item)
    }
    subscript(i: Int) -> Int {
        return items[i]
    }
}

// Такая же структура, но для String. `Item` выводится как `String`.
struct StringStack: Container {
    var items = [String]()
    var count: Int { return items.count }
    mutating func append(_ item: String) {
        items.append(item)
    }
    subscript(i: Int) -> String {
        return items[i]
    }
}

Для чего это нужно:

  • Гибкость: Один протокол может быть принят множеством разных типов, работающих с разными данными.

  • Безопасность типов: Компилятор следит за тем, чтобы типы были согласованы. В примере выше IntStack может работать только с Int.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    8

Навыки

  • Swift

    Swift

Ключевые слова

#swift

#protocol

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.