В следующем коде:
_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
Обратите внимание, что я ИСПОЛЬЗУЮ эти переменные как lvalues непосредственно перед & строк ...
Как можно жаловаться, что значение не является lvalue сразу после того, как я присвоил ему значение без ошибки? это связано с магическими геттерами / сеттерами, которые создает цель C?
Я думаю, мне нужно объяснить контекст, чтобы объяснить, ПОЧЕМУ я пытаюсь получить адрес:
в моем предыдущем сообщении SO я показал тот же код, напечатал% d и обнаружил, что после назначений свойства по какой-то причине все еще были равны 0. Итак, я решил, что я попытаюсь получить адреса свойств, чтобы увидеть, где они хранятся, и, возможно, я смогу понять, почему я не назначаю их успешно, и тогда это произошло.
Я думаю, что, как уже упоминали люди, да, возможно, когда я делаю задание, obj-c тайно заменяет это вызовом установщика (а затем каким-то другим волшебством, потому что в другом сообщении SO, кто-то еще упомянул,
BOOL b = [_imageView setHasVerticleScroller: YES]
терпит неудачу, но
BOOL b = _imageView.hasVerticalScroller = YES;
отлично работает.