2016-07-26 8 views
1

ich eine Beispielklasse und eine Eigenschaft vom Typ habe Int etwa so:Eigentum Beobachter und ihr Verhalten

class StepCounter { 
    var totalSteps: Int = 0 { 
     willSet(newTotalSteps) { 
      print("about to set steps to \(newTotalSteps)") 
     } 
     didSet { 
      if totalSteps > oldValue { 
       print("Added \(totalSteps - oldValue) steps") 
      } 

     } 
    } 
} 

Nun, wenn ich eine Instanz dieser Klasse machen und eine Reihe meinen var totalSteps wie so zuordnen:

let anObj = StepCounter() 

anObj.totalSteps = 2000 

ich erhalte die Konsolenausgabe wie erwartet:

about to set steps to 2000 
Added 2000 seteps 

Bu t wenn ich anObj.totalSteps -= 1 mache, bekomme ich nur die willSet Ausgabe, die about to set steps to 1999 sagt, und die didSet wird nie ausgeführt. Was passiert und warum bekomme ich die willSet Druckanweisung nicht ausgeführt? Hilf mir, danke.

Antwort

1

In Ihrem didSet Sie haben:

if totalSteps > oldValue 

Aber wenn man anObj.totalSteps -= 1 tun, sind die gesamten Schritte nicht größer als der alte Wert!

So wird die print nicht wie erwartet ausgeführt. :)

+0

Eine so dumme Frage. Danke @EricD. : D – Dershowitz123

+0

Eh, Fehler passieren. Bitte. :) – Moritz