2012-05-26 68 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}; 
相关问题