didSet in Swift has a weird knock-on effect on mutating func : <p>I just learned that mutating func is just a curried func with first parameter as inout, so the code below will work and change <code>firstName</code> to <code>"John"</code></p>

<pre><code>struct Person {
    var firstName = "Matt"

    mutating func changeName(fn: String) {
        firstName = fn
    }
}
var p = Person() 
let changer = Person.changeName
changer(&amp;p)("John")
p.firstName
</code></pre>

<p>but the odd thing happend when I add property observer to <code>p</code> like below, you can see <code>firstName</code> is still "Matt", why?
<a href="https://i.stack.imgur.com/uLchZ.png" rel="noreferrer"><img src="https://i.stack.imgur.com/uLchZ.png" alt="enter image description here"></a></p>
