Получение и установка переменных в классах означает либо получение («получение»), либо изменение («установку») их содержимого.
Рассмотрим переменную 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
теперь стал вычисляемым свойством, что означает, что он действует только как интерфейс для работы с нашей фактической переменной.