Computed Variables & Variable Observers

The Swift doc only mentions computed properties and property observers.

However, any variable can be computed, and any variable can have observers. For example, this code

func foo() {
    var a = 0 {
        willSet {
            print("willSet `a` from \(a) to \(newValue)")
        }

        didSet {
            print("didSet `a` from \(oldValue) to \(a)")
        }
    }

    var b: Int {
        get {
            print("get `b`'s value from `a`: \(a)")
            return a
        }

        set {
            print("set `b`'s value to `a`: \(newValue)")
            a = newValue
        }
    }

    b += 1
}

foo()

prints out

get `b`'s value from `a`: 0
set `b`'s value to `a`: 1
willSet `a` from 0 to 1
didSet `a` from 0 to 1

(You will see an additional get b's value from a: 1 in Playground because b's value is read by Playground for displaying.)