There are two distinct dot syntaxes being used here. They look the same, but they do different things depending on what they are operating on and what is being done with it:
- The first
myView.frame
is a shorthand for[myView frame]
, a method call that returns aCGRect
struct by value. myFrame.origin.x
is accessing ordinary struct members in the traditional C fashion.- The second
myView.frame
is again a shorthand, but because the statement is an assignment it translates to calling a different method,[myView setFrame:myFrame]
.
In your single-line top example, you get a copy of the rect and set its x
, but never copy it back to the view. You have to explicitly differentiate between the method calls, the dot syntax sugar can’t magic them into a single call.