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

Ответ

Да, можно, но только при условии, что также определен и геттер (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 выдаст ошибку.

Ответ 18+ 🔞

Да ты посмотри, какая история интересная вырисовывается! Сижу я тут, кофе попиваю, и вдруг осенило — а ведь в Swift, сука, нельзя просто так взять и объявить вычисляемое свойство с одним лишь сеттером! Это как прийти в гости и заявить: «Я только сру, а мыться не буду». Не прокатит, блядь!

Вот представь себе, пишешь ты код, такой весь из себя умный, и думаешь: «О, сделаю-ка я свойство, которое только записывается!». А компилятор тебе такой: «Ага, щас, блядь! А где геттер, пидорас шерстяной?». И всё, приехали.

Так что запомни раз и навсегда, как отче наш: геттер обязателен, ёпта! Сеттер — это уже по желанию, как добавка к борщу. Хочешь — кладёшь сметану, не хочешь — жрёшь так.

Вот смотри, как это выглядит в реальной жизни, без всяких там выебонов:

private var _storedValue: Int = 0 // Это наша заначка, спрятанная от всех

var computedProperty: Int {
    get { // Без этого блока — нихуя не получится, это как пропуск на завод
        return _storedValue
    }
    set(newValue) { // А это уже твоя воля, можешь тут всю магию творить
        // Например, проверить, не несёт ли клиент хуйню
        if newValue >= 0 {
            _storedValue = newValue
        } else {
            print("Ой, всё! Отрицательное число? Серьёзно?")
        }
    }
}

Итог простой, как три копейки:

  1. Геттер — святое. Без него свойство считается read-only, и всё, пиши пропало.
  2. Сеттер — опциональный прихулок. Хочешь — добавляй свою логику, не хочешь — и так сойдёт.
  3. Сеттер без геттера — это как велосипед без колёс. Никуда не уедешь, только насмешишь компилятор, который тебе тут же впендюрит ошибку.

Вот и весь сказ, блядь. Не усложняй, делай по правилам, и будет тебе счастье. А то начнёшь выёбываться — сам от себя охуеешь, когда ничего не заработает.