Getter und Setter in Swift - Ist es sinnvoll, stattdessen WillSet und DidSet zu verwenden?

8

Ich habe einige Nachforschungen über die Gründe angestellt, warum wir Get und Set für unsere Immobilien verwenden sollten.

Ich habe 3 Hauptgründe dafür bemerkt

  1. Wenn Sie etwas tun / überprüfen wollen, bevor Sie das tatsächlich gesetzt haben Eigenschaft
  2. Wenn Sie eine Eigenschaft haben möchten, die Sie nur daraus erhalten können (vielleicht aus Sicherheitsgründen, schätze ich?), oder geben Sie ihm einen anderen Zugang Ebenen.
  3. Ausblenden der internen Repräsentation der Eigenschaft während der Belichtung eines Eigenschaft, die eine alternative Darstellung verwendet. (was für mich nicht stimmt macht sehr viel Sinn, da ich mit falschem Zugriff darauf zugreifen kann die Set-Funktion anyways)

Der folgende Code ist ein Beispiel dafür, wie Sie die Eigenschaften "Abrufen" und "Festlegen" für Eigenschaften in Swift implementieren würden, indem Sie die drei genannten Punkte nutzen:

%Vor%

Aber dieses andere Beispiel unten nutzt auch die genannten Punkte aus, aber anstatt eine andere berechnete Eigenschaft zu verwenden, um den Wert der privaten Eigenschaft zurückzugeben, benutze ich nur die Beobachter von WilleSet und DidSet

%Vor%

Ich bin also neugierig zu wissen, was die VORTEILE und Nachteile jeder Implementierung sind.

Vielen Dank im Voraus

    
Henrique da Costa 31.08.2016, 16:32
quelle

1 Antwort

3

Ihre Frage läuft auf Kompilierungszeit vs. Laufzeitfehler ab. Um Ihre 3 Fragen zu beantworten:

  1. Ja, willCheck ist Ihre einzige Option hier
  2. Readonly-Eigenschaften lassen sich in zwei Typen unterteilen: (a) solche, deren Wert von anderen Eigenschaften abgeleitet ist, z. B. deren Summe; und (b) diejenigen, die Sie selbst ändern können, aber nicht von den Benutzern. Der erste Typ hat wirklich keinen Setter; der zweite Typ hat einen öffentlichen Getter und einen privaten Setter . Der Compiler kann Ihnen dabei helfen, das zu überprüfen, und das Programm wird nicht kompiliert. Wenn Sie fatalError in didSet ausgeben, erhalten Sie einen Laufzeitfehler und Ihre Anwendung stürzt ab.
  3. Es kann Zustandsobjekte geben, mit denen der Benutzer sich nicht herumschlagen soll, und ja, Sie können diese vollständig vor den Benutzern verbergen.

Ihr erstes Codebeispiel war zu ausführlich bei der Definition der Hintergrundvariablen - Sie müssen das nicht tun. Um diese Punkte zu veranschaulichen:

%Vor%

Verwendung:

%Vor%

Ein Hinweis zu private in Swift 2 vs. Swift 3: Wenn Sie dies auf einem Swift 2-Spielplatz versuchen, finden Sie t.greeting = "Goodbye world" funktioniert ganz gut. Dies liegt daran, dass Swift 2 einen seltsamen Zugriffsebenen-Spezifizierer hat: private bedeutet "nur zugänglich innerhalb der aktuellen Datei". Trennen Sie die Klassendefinition und den Beispielcode in verschiedene Dateien und Xcode wird sich beschweren. In Swift 3 wurde das in fileprivate geändert, was sowohl klarer ist als auch das Schlüsselwort private für etwas ähnliches wie Java und .NET speichert.

    
Code Different 01.09.2016, 04:29
quelle