Как получить доступ к назначению элементов CGRect, когда CGRect является переменной экземпляра

@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.

7
задан martin's 2 May 2011 в 22:07
поделиться