The other answers don't exactly explain what's going on here, so this is the basic problem:
When you write blackKey.center.x
, the blackKey.center
and center.x
both look like struct member accesses, but they're actually completely different things. blackKey.center
is a property access, which desugars to something like [blackKey center]
, which in turn desugars to something like objc_msgSend(blackKey, @selector(center))
. You can't modify the return value of a function, like objc_msgSend(blackKey, @selector(center)).x = 2
— it just isn't meaningful, because the return value isn't stored anywhere meaningful.
So if you want to modify the struct, you have to store the return value of the property in a variable, modify the variable, and then set the property to the new value.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…