Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про IOS: protocol, usage

Приведи примеры практического использования протоколов в iOS-проектах

Вопрос проверяет умение применять протоколы не теоретически, а в реальных задачах iOS-разработки.

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

Протоколы часто используются для сервисов, навигации, конфигурации UI и тестирования. Они позволяют скрыть детали реализации и работать через контракт. Это упрощает замену компонентов и снижает связность. Также протоколы помогают переиспользовать код через extensions. В реальных проектах они встречаются практически в каждом слое приложения.

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

В продакшн-коде протоколы появляются не «ради архитектуры», а потому что они решают конкретные проблемы поддержки и расширения кода.

Сервисы и работа с зависимостями

Один из самых частых кейсов — абстракция сервисов.

Пример: сетевой сервис

protocol NetworkService {
    func request<T: Decodable>(_ endpoint: Endpoint) async throws -> T
}

Преимущества:

  1. ViewModel не знает, как именно выполняется запрос.

  2. Реализацию можно заменить (URLSession, mock, stub).

  3. Код легче тестировать.

Навигация и координаторы

Навигация часто выносится из контроллеров.

Пример:

protocol ProfileRouting {
    func openSettings()
}

Контроллер:

  • не знает, push это или present;

  • не управляет стеком напрямую.

Это уменьшает связность UI и навигации.

Конфигурация UI-компонентов

Протоколы удобно использовать для настройки ячеек и view.

Пример:

protocol ConfigurableCell {
    associatedtype Model
    func configure(with model: Model)
}

Использование:

  1. Ячейка знает только свою модель.

  2. Таблица не зависит от конкретного типа ячейки.

  3. Уменьшается количество if и кастов.

Работа с делегатами

Delegate — это классический паттерн на протоколах.

Типичные кейсы:

  1. Передача событий из view.

  2. Обратная связь из кастомных компонентов.

  3. Изоляция UI от бизнес-логики.

Тестирование

В тестах протоколы используются постоянно.

Пример:

protocol AuthService {
    func login() async throws
}

В тестах:

  • real service заменяется на mock;

  • проверяется поведение, а не реализация.

Extensions и переиспользование логики

Протоколы + extensions позволяют убрать дублирование.

Пример:

protocol ReusableView {
    static var reuseIdentifier: String { get }
}

extension ReusableView {
    static var reuseIdentifier: String {
        String(describing: Self.self)
    }
}

Любая ячейка автоматически получает reuseIdentifier.

Практический вывод

Протоколы чаще всего применяются для сервисов, навигации, UI-компонентов и тестов. Если в проекте почти нет протоколов — код, скорее всего, будет жестко связан и плохо масштабируем.

  • Аватар

    iOS Guru

    Roman Isakov

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • IOS

    IOS

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

#protocol

#usage

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

  • Аватар

    iOS Guru

    Roman Isakov

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