2012-05-26 3 views
4

Я натолкнулся на что-то на днях, чтобы установить значение C Structs, используя фигурные скобки, и он отлично работает, но мне интересно, почему именно я не могу использовать его для настройки значение свойств?Почему {} работает для C Structs, но не для свойств

ошибка
//This works: 
CGPoint pt = {10, 20}; 
CGRect rct = {0, 5, 50, 50}; 

//But this doesn't: 
self.frame = {0, 5, 50, 50}; 
imageview.center = {100, 120}; 

Компилятор «ожидаемое выражение»

Я думаю, что я знаю, почему это не работает, но я хотел бы более полное объяснение.

ответ

7

Первые строки объединить декларации и инициализации переменных. Компилятор отображает тип правильного выражения из типа левого выражения и распределяет числа в слотах структуры, как ожидалось.

Последние строки, однако, не являются инициализацией. Теперь компилятор ничего не сделает. Как следствие, компилятор не знает, как он должен интерпретировать материал справа. Каков его тип, как разместить эти числа в памяти? Компилятор не будет использовать CGrect или CGPoint, и вы должны помочь ему с явным литом (CGRect) {0,5,50,50}, который дает ему недостающую информацию.

+0

Имеет смысл. благодаря – daveMac

3

Это должно работать:

self.frame = (CGRect){0, 5, 50, 50}; 
imageview.center = (CGPoint){100, 120}; 
Смежные вопросы