Можно ли у вычисляемого свойства (computed property) в Swift определить сеттер (setter)?

«Можно ли у вычисляемого свойства (computed property) в Swift определить сеттер (setter)?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно, но только при условии, что также определен и геттер (getter). Вычисляемое свойство не может иметь только сеттер.

Пример объявления:

private var _storedValue: Int = 0

var computedProperty: Int {
    get {
        return _storedValue
    }
    set(newValue) {
        // Можно добавить валидацию или дополнительную логику
        _storedValue = newValue
    }
}

Ключевые правила:

  1. Обязателен геттер. Без блока get свойство считается read-only.
  2. Сеттер опционален. Его можно опустить, сделав свойство доступным только для чтения.
  3. Логика в сеттере. В блоке set можно выполнять валидацию, обновлять другие свойства или вызывать методы.
  4. Невозможен сеттер без геттера. Компилятор Swift выдаст ошибку.