2010-02-11 5 views
0

Может ли кто-нибудь объяснить, почему второй синтаксис одного и того же выражения не работает? Если вам нужен какой-то фон, manyViews - это указатель на NSMutableArray, загруженный объектами UIView.Вопрос синтаксиса о доступе к свойствам объектов, хранящихся в NSMutableArray

[[manyViews objectAtIndex:0] setFrame:CGRectMake(30,30,100,20)]; // works as intended 

[manyViews objectAtIndex:0].frame = CGRectMake(30,30,100,20);  // compiler does not recognize the "frame" member 

ответ

1

Текущее ограничение на компилятор (как gcc, так и Clang). Точечная нотация безнадежно перегружена, и компилятор считает, что вы пытаетесь назначить поле в структуре. Идентификатор не является структурой, поэтому он дает ошибку. Я использую его сам, но я до сих пор считаю, что точечное обозначение было, безусловно, худшим дополнением в ObjC2. Это создает много путаницы для программистов, и, как мы видим здесь, часто создает путаницу для компилятора.

Более поздние версии gcc или clang могут найти способ правильно разобрать это.

+0

Я продолжу привычку использовать синтаксис сообщений для объектов и попытаться как можно больше оставить точечные обозначения для структур. Благодаря! – bitcruncher

Смежные вопросы