在以下代码中:
_imageView.hasHorizontalScroller = YES;
_imageView.hasVerticalScroller = YES;
_imageView.autohidesScrollers = YES;
NSLog(@"scrollbar? H %p V %p hide %p",
&(_imageView.hasHorizontalScroller),
&(_imageView.hasVerticalScroller),
&(_imageView.autohidesScrollers));
我收到错误:
Controller.m:143: error: lvalue required as unary '&' operand
Controller.m:144: error: lvalue required as unary '&' operand
Controller.m:145: error: lvalue required as unary '&' operand
请注意,我在 & 行之前直接使用这些变量作为左值...
在我没有错误地分配给它之后,它怎么能抱怨一个值不是左值?这是否与目标 C 创建的神奇 getter/setter 有关?
我想我需要解释一些上下文来解释我为什么要获取地址:
在我之前的 SO 帖子中,我展示了相同的代码,打印 %d 并发现在分配之后,由于某种原因,属性仍然为 0。所以,我想我会尝试获取属性的地址以查看它们的存储位置,也许我可以弄清楚为什么我没有成功分配给它们,然后就发生了这种情况。
我认为正如人们提到的那样,是的,可能是当我进行分配时,obj-c 会秘密地用调用 setter 代替它(然后是其他一些魔法,因为在另一篇 SO 帖子中,其他人提到了
BOOL b = [_imageView setHasVerticleScroller: YES]
失败,但是
BOOL b = _imageView.hasVerticalScroller = YES;
工作正常。