Das Abrufen und Setzen von Variablen innerhalb von Klassen bezieht sich entweder auf das Abrufen ("Abrufen") oder das Ändern ("Setzen") ihres Inhalts.
Betrachten Sie eine Variable members
einer Klasse family
. Natürlich müsste diese Variable eine ganze Zahl sein, da eine Familie niemals aus zwei Punkten bestehen kann.
Sie würden also wahrscheinlich fortfahren, indem Sie die members
Variable folgendermaßen definieren :
class family {
var members:Int
}
Dies gibt jedoch Personen, die diese Klasse verwenden, die Möglichkeit, die Anzahl der Familienmitglieder auf 0 oder 1 zu setzen. Und da es keine Familie mit 1 oder 0 gibt, ist dies ziemlich unglücklich.
Hier kommen die Getter und Setter ins Spiel. Auf diese Weise können Sie selbst entscheiden, wie Variablen geändert werden können und welche Werte sie erhalten können und welche Inhalte sie zurückgeben.
Wenn wir zu unserer Familienklasse zurückkehren, stellen wir sicher, dass niemand den members
Wert auf weniger als 2 setzen kann:
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')
}
}
}
}
Jetzt können wir members
wie zuvor auf die Variable zugreifen , indem wir sie eingeben instanceOfFamily.members
, und dank der Setter-Funktion können wir ihren Wert auch wie zuvor festlegen, indem wir beispielsweise Folgendes eingeben : instanceOfFamily.members = 3
. Was sich jedoch geändert hat, ist die Tatsache, dass wir diese Variable nicht mehr auf etwas kleiner als 2 setzen können.
Beachten Sie die Einführung der _members
Variablen, bei der es sich um die tatsächliche Variable handelt, mit der der Wert gespeichert wird, den wir über die members
Setter-Funktion festgelegt haben. Das Original members
ist jetzt eine berechnete Eigenschaft, was bedeutet, dass es nur als Schnittstelle für die Behandlung unserer tatsächlichen Variablen fungiert.