NEW: Learn iOS 11 with my latest book! >>

< Previous: It's play time: index(of:) and joined()   Next: Wrap up >

Property observers: didSet

There's one last thing to cover before this project is done, and it's really small and really easy: property observers.

Right now we have a property called score that is set to 0 when the game is created and increments by one whenever an answer is found. But we don't do anything with that score, so our score label is never updated.

One solution to this problem is to use something like scoreLabel.text = "Score: \(score)" whenever the score value is changed, and that's perfectly fine to begin with. But what happens if you're changing the score from several places? You need to keep all the code synchronised, which is unpleasant.

Swift has a simple and classy solution called property observers, and it lets you execute code whenever a property has changed. To make them work, you need to declare your data type explicitly (in our case we need an Int), then use either didSet to execute code when a property has just been set, or willSet to execute code before a property has been set.

In our case, we want to add a property observer to our score property so that we update the score label whenever the score value was changed. So, change your score property to this:

var score: Int = 0 {
    didSet {
        scoreLabel.text = "Score: \(score)"
    }
}

Note that when you use a property observer like this, you need to explicitly declare its type otherwise Swift will complain.

Using this method, any time score is changed by anyone, our score label will be updated. That's it, the project is done!

Learn Server-Side Swift now!

Take your Swift code to the server and become a full-stack developer with my latest book: Server-Side Swift!

< Previous: It's play time: index(of:) and joined()   Next: Wrap up >
Click here to visit the Hacking with Swift store >>