> Как разделить функции для чтения и записи значений (iOS, Swift)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: Revolut

Стек: iOS, Swift

> Пример ответа

В iOS-разработке на Swift разделение функций чтения и записи значений - это ключевой принцип проектирования, который повышает безопасность, тестируемость и читаемость кода. Основные подходы:

  1. Использование геттеров и сеттеров (computed properties):

    SWIFT
    private var _value: Int = 0
    var value: Int {
    get { return _value }
    set { _value = newValue }
    }

    Это позволяет добавить валидацию или логирование при записи, сохраняя простой доступ для чтения.

  2. Разделение через протоколы (рекомендуемый способ):

    SWIFT
    protocol Readable {
    var value: Int { get }
    }
    protocol Writable {
    var value: Int { get set }
    }
    class MyClass: Readable, Writable {
    var value: Int = 0
    }

    Так вы можете передавать объект только как Readable в функции, которым не нужна запись, предотвращая случайные изменения.

  3. Private(set) модификатор (самый лаконичный для iOS):

    SWIFT
    struct Model {
    private(set) var value: Int = 0
    mutating func updateValue(_ new: Int) {
    // валидация
    value = new
    }
    }

    Чтение доступно извне, а запись - только внутри структуры через специальный метод.

  4. Функциональное разделение (для сложной логики):

    • Функция readValue() возвращает значение.
    • Функция writeValue(_ newValue:) изменяет его, возможно, с асинхронной обработкой или блокировками (например, в многопоточных сценариях с DispatchQueue).

Выбор зависит от контекста: для простых моделей данных подходит private(set), для публичных API - протоколы, для сложной бизнес-логики - отдельные методы с явными именами.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью