Ошибка появляется, потому что вас путают в двух различных применениях точечной нотации. Первый - ann.coordinate
, где координата является свойством любого объекта ann. Второй - coordinate.latitude
, где координата - это структура, а широта - это поле в структуре. Обычно можно назначить свойство, как в ann.coordinate = aNewCoordinate
. И обычно можно назначить поле struct, как в coordinate.latitude = latit
. Однако нельзя назначить поле анонимной структуры, возвращенному из свойства getter. Это станет совершенно очевидным, если вы удалите нотацию свойства dot, так как вы остаетесь с [ann coordinate].latitude = latit
, что явно неверно. Семантический, вы просите компилятор построить код, который похож на
__typeof__(ann.coordinate) __tempCoordinate = ann.coordinate;
__tempCoordinate.latitude = latit;
ann.coordinate = __tempCoordinate;
, но это далеко выходит за рамки синтаксиса точки и компилятор отказывается генерировать этот код (и это справедливо).