Изменение уровня доступа сеттера
По умолчанию уровни доступа геттера и сеттера свойства идентичны. Например, в данном случае 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.