@interface some_class : some_parent {
}
@property (nonatomic, assign) CGRect the_rect;
@end
...
@implementation some_class
@synthesize the_rect;
@end
После создания экземпляра some_class:
instance_of_some_class.the_rect.origin.x = 0.0;
, который генерирует ошибку «Выражение не назначается».
Конечно, это работает нормально:
instance_of_some_class.the_rect = CGRectMake(0,0,0,0);
Я думаю, проблема в том, что автоматически созданный сеттер знает только о назначении CGRect для "the_rect". Хорошо, я понял. Могу ли я сказать ему, чтобы он не создавал сеттер, чтобы я мог напрямую обращаться к переменной-члену и делать назначения членам структуры без необходимости назначать весь CGRect?
Я полагаю, что мог бы разбить это на четыре отдельных CGFloat для origin .x, origin.y, size.width и size.height ... но вы могли бы подумать, что это можно сделать с помощью CGRects.
What ' сбивает с толку то, что это, конечно, прекрасно работает:
CGRect test = instance_of_some_class.the_rect.origin.x;
Другими словами, получатель знает, как перемещаться по структуре и извлекать значение одного из ее элементов, чтобы я мог его использовать. Противоположное, похоже, не так, поскольку вы просто не можете добраться до ivar, который оказывается структурой, и выполнить присвоение одному из его элементов без необходимости назначать всю структуру.
Я также пробовал это:
@interface some_class : some_parent {
@public
CGRect the_rect;
}
@property (nonatomic, assign) CGRect the_rect;
@end
После создания экземпляра в другом модуле:
instance.the_rect->origin.x = some_value;
... и возникла ошибка о том, что элемент, на который ссылаются, не является указателем. Я попытался взять адрес instance.the_rect ... но это тоже не сработало.
EDIT TO CLARIFY: Речь идет о создании класса, у которого есть некоторые ivars, которые оказались структурами. Затем, после создания экземпляра класса в другом месте, вы хотите иметь возможность напрямую назначать элементы struct ivar:
class_instance.struct_ivar.element = something;
Я использую CGRect как удобный пример хорошо известной структуры, которую можно было бы использовать в качестве ivar.