2012-05-26 86 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}; 
相關問題