Изменение уровня доступа сеттера

По умолчанию уровни доступа геттера и сеттера свойства идентичны. Например, в данном случае value окажется совершенно недоступным извне:

import Foundation

class Counter {
    private var value = 0

    func increase() {
        value++
    }
    
    func decrease() {
        value--
    }
}

Но что если свойство должно быть открытым на чтение за пределами класса? Перевод его в публичные открывает вместе с тем и изменения, это не всегда допустимо. Другой способ — оставить приватность и создать еще одно свойство с геттером, смотрящим на наше значение. Так задача решится, но добавятся новые связи, усложняющие код.

Благо, Swift — красивый язык, в котором можно найти решение поизящнее. В данном случае поможет конструкция private(set), позволяющая задавать сеттеру уровень доступа ниже геттера:

import Foundation

class Counter {
    private(set) var value = 0
    
    func increase() {
        value++
    }
    
    func decrease() {
        value--
    }
}

Теперь у геттера видимость по умолчанию, то есть internal, а у сеттера private.