次のコードでは:
_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
これらの変数を & 行の直前の左辺値として使用していることに注意してください...
エラーなしで割り当てた直後に、値が左辺値ではないことをどのように訴えることができますか? これは、Objective C が作成する魔法のゲッター/セッターと関係がありますか?
アドレスを取得しようとしている理由を説明するために、いくつかのコンテキストを説明する必要があると思います。
以前の SO 投稿で、同じコードを示し、 %d を出力し、割り当ての後、何らかの理由でプロパティがまだ 0 であることを発見しました。そのため、プロパティのアドレスを取得して、それらが保存されている場所を確認しようと考えました。おそらく、それらに正常に割り当てられない理由を理解できると思いましたが、これが起こりました.
人々が言及したように、ええ、おそらく私が代入 obj-c を行うとき、密かにそれをセッターへの呼び出しに置き換えていると思います(別のSO投稿で、他の誰かがそれを言及したため、他の魔法
BOOL b = [_imageView setHasVerticleScroller: YES]
失敗しますが、
BOOL b = _imageView.hasVerticalScroller = YES;
正常に動作します。