Получение и установка переменных в классах означает либо получение («получение»), либо изменение («установку») их содержимого.
Рассмотрим переменную membersкласса family. Естественно, эта переменная должна быть целым числом, поскольку семья никогда не может состоять из двух или более человек.
Итак, вы, вероятно, определили бы membersпеременную следующим образом:
class family {
var members:Int
}
Это, однако, даст людям, использующим этот класс, возможность установить количество членов семьи примерно на 0 или 1. И поскольку не существует такой вещи, как семья из 1 или 0, это весьма прискорбно.
Вот тут-то и пригодятся геттеры и сеттеры. Таким образом, вы можете решить для себя, как можно изменять переменные и какие значения они могут получать, а также решать, какой контент они возвращают.
Возвращаясь к нашему семейному классу, давайте убедимся, что никто не может установить membersзначение меньше 2:
class family {
var _members:Int = 2
var members:Int {
get {
return _members
}
set (newVal) {
if newVal >= 2 {
_members = newVal
} else {
println('error: cannot have family with less than 2 members')
}
}
}
}
Теперь мы можем получить доступ к membersпеременной , как и прежде, набрав instanceOfFamily.members, а благодаря функции сеттер, мы можем установить его значение , как и прежде, набрав, например: instanceOfFamily.members = 3. Что изменилось, так это то, что мы больше не можем устанавливать для этой переменной значение меньше 2.
Обратите внимание на введение _membersпеременной, которая является фактической переменной для хранения значения, которое мы установили с помощью membersфункции установки. Оригинал membersтеперь стал вычисляемым свойством, что означает, что он действует только как интерфейс для работы с нашей фактической переменной.