为什么{}适用于C Structs而不适用于属性

时间:2012-05-26 15:11:38

标签: objective-c syntax properties struct

前几天我通过使用花括号来设置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};

编译器错误是"期望的表达式"

我想我知道为什么这不起作用,但我想要更全面的解释。

2 个答案:

答案 0 :(得分:7)

第一行结合了变量的声明和初始化。编译器根据左表达式的类型推断出正确表达式的类型,并按预期在结构槽中分配数字。

然而,最后一行不是初始化。现在编译器不会推断任何东西。因此,编译器不知道它应该如何解释右边的东西。它的类型是什么,如何在内存中布局这些数字?编译器不会假设它的CGrect或CGPoint,你必须帮助他进行显式演员(CGRect){0,5,50,50},这会给他提供缺失的信息。

答案 1 :(得分:3)

这应该有效:

self.frame = (CGRect){0, 5, 50, 50};
imageview.center = (CGPoint){100, 120};