当我尝试编译我的代码,其中安是一个注释的左操作数,坐标是二维的坐标,并latit是浮动需要帮助处理错误消息:需要Ivalue作为分配
ann.coordinate.latitude = latit;
我得到一个错误消息说作为赋值的左操作数需要Ivalue。这个错误是什么意思,它为什么显示出来?
当我尝试编译我的代码,其中安是一个注释的左操作数,坐标是二维的坐标,并latit是浮动需要帮助处理错误消息:需要Ivalue作为分配
ann.coordinate.latitude = latit;
我得到一个错误消息说作为赋值的左操作数需要Ivalue。这个错误是什么意思,它为什么显示出来?
错误显示出来,因为您被点符号的两种不同用法所困惑。第一个是ann.coordinate
,其中坐标是任何对象的属性。第二个是coordinate.latitude
,其中坐标是结构,纬度是结构中的字段。通常可以分配给一个属性,如ann.coordinate = aNewCoordinate
。通常可以将其分配给结构字段,如coordinate.latitude = latit
。但是,不能分配给从属性获取器返回的匿名结构的字段。如果您删除属性点符号,这将变得非常明显,因为您随后留下了[ann coordinate].latitude = latit
,这显然是错误的。语义,你问的编译器来构建代码,类似于
__typeof__(ann.coordinate) __tempCoordinate = ann.coordinate;
__tempCoordinate.latitude = latit;
ann.coordinate = __tempCoordinate;
但这远点语法的范围和编译器拒绝生成该代码(这是理所当然的)。
这意味着,当你做ann.coordinate.latitude时,你实际上是在尝试给getter分配一些东西。纬度返回一个值,你不能分配一些东西给它。您必须创建一个新的坐标并将其分配给ann。