Ich lerne Swift und lese The Swift Programming Language
von Apple. Ich habe keinen Objective C-Hintergrund (nur PHP, JS und andere, aber kein Obj C).
Auf Seite 24-25 sehe ich diesen Code:
//...Class definition stuff...
var perimeter: Double {
get {
return 3.0 * sideLength
}
set {
sideLength = newValue / 3.0
}
}
//...Class continues...
Dieser Teil ist NICHT im Buch angegeben und ich kann nicht verstehen, wofür diese sind.
Kann mir jemand erklären, was bekommen und setzen sind?
Antworten:
Das wird tatsächlich direkt vor dem Code erklärt:
Wenn eine andere Klasse diese Perimetervariable erhalten möchte, tun sie Folgendes:
... was das nennt:
Und so ist es im Wesentlichen so, als ob der aufrufende Controller dies getan hätte:
Wenn Sie die Variable von einem anderen Objekt aus festlegen , sieht dies folgendermaßen aus:
Welches ruft den Code im
set{}
Block auf:Und so ist es, als hätte die Klasse, die die Variable setzt, Folgendes getan:
Es ist wirklich nur der Einfachheit halber - Sie können dies aus einem anderen Code aufrufen, ohne ständig durch 3 dividieren oder multiplizieren zu müssen, da dies unmittelbar vor dem Festlegen der Variablen und unmittelbar vor dem Abrufen der Variablen erfolgt.
In Swift können wir Eigenschaften haben, die beim Abrufen berechnet werden und beim Festlegen etwas tun können. Wir könnten dies auch in Ziel-C tun:
quelle
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 Klassefamily
. 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 :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:Jetzt können wir
members
wie zuvor auf die Variable zugreifen , indem wir sie eingebeninstanceOfFamily.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 diemembers
Setter-Funktion festgelegt haben. Das Originalmembers
ist jetzt eine berechnete Eigenschaft, was bedeutet, dass es nur als Schnittstelle für die Behandlung unserer tatsächlichen Variablen fungiert.quelle
members
==>count
,numberOfMembers
;var members : Set<Person>
??set (newVal) { ... }
, newVal ist impliziert, alsoset { _members = newVal }
auch richtig._members
privat sein sollte, sonst wird der BefehlinstanceOfFamily._members=1
gesetzt würdeinstanceOfFamily.members
auf einen Wert unter 2newValue
in Swift 4 - docs.swift.org/swift-book/LanguageGuide/Properties.html#ID260Auf eine einfache Frage sollte eine kurze, einfache und klare Antwort folgen.
Wenn wir einen Wert der Immobilie erhalten, feuert sie ihren
get{}
Teil ab.Wenn wir einen Wert für die Eigenschaft festlegen, wird ihr
set{}
Teil ausgelöst .PS. Wenn Sie einen Wert für die Eigenschaft festlegen, erstellt SWIFT automatisch eine Konstante mit dem Namen "newValue" = ein Wert, den wir festlegen. Nach einer Konstante wird "newValue" im
set{}
Teil der Eigenschaft zugänglich .Beispiel:
quelle
Sie sollten sich die berechneten Eigenschaften ansehen
In Ihrem Codebeispiel
perimeter
ist eine Eigenschaft nicht durch eine Klassenvariable gesichert, sondern ihr Wert wird mithilfe derget
Methode berechnet und über dieset
Methode gespeichert - normalerweise als Getter und Setter bezeichnet .Wenn Sie diese Eigenschaft wie folgt verwenden:
Sie rufen den im
get
Codeblock enthaltenen Code auf und wenn Sie ihn folgendermaßen verwenden:Sie rufen den im
set
Codeblock enthaltenen Code auf, dernewValue
automatisch mit dem rechts vom Zuweisungsoperator angegebenen Wert gefüllt wird.Berechnete Eigenschaften können schreibgeschützt werden, wenn sowohl ein Getter als auch ein Setter angegeben sind, oder schreibgeschützt, wenn nur der Getter angegeben ist.
quelle
Variable deklariert und ruft so in einer Klasse auf
Jetzt möchten Sie programmieren, um den Standardwert von x größer oder gleich 3 zu machen. Nehmen Sie nun den hypothetischen Fall, wenn x kleiner als 3 ist, schlägt Ihr Programm fehl. Sie möchten also, dass die Leute entweder 3 oder mehr als 3 setzen. Swift hat es Ihnen leicht gemacht, und es ist wichtig, diese etwas fortgeschrittene Art der Datierung des Variablenwerts zu verstehen, da sie in der iOS-Entwicklung ausgiebig verwendet werden. Nun wollen wir sehen, wie get und set hier verwendet werden.
Wenn Sie immer noch Zweifel haben, denken Sie daran, dass get und set dazu dient, jede Variable so zu aktualisieren, wie wir es möchten. get and set gibt Ihnen eine bessere Kontrolle, um Ihre Logik zu regieren. Leistungsstarkes Werkzeug daher nicht leicht verständlich.
quelle