4

先日、中かっこを使用して C 構造体の値を設定するものに出会いました。これはうまく機能しますが、プロパティの値を設定するために正確に使用できないのはなぜでしょうか?

//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};

コンパイラ エラーは「期待される式」です

これが機能しない理由はわかっていると思いますが、より詳細な説明が必要です。

4

2 に答える 2

7

最初の行は、変数の宣言と初期化を組み合わせています。コンパイラは、左側の式の型から右側の式の型を推測し、期待どおりに構造体スロットに数値を分配します。

ただし、最後の行は初期化ではありません。これで、コンパイラは何も推測しなくなります。結果として、コンパイラは右側のものをどのように解釈すべきかを知りません。その型は何ですか、それらの数値をメモリに配置する方法は? コンパイラはその CGrect または CGPoint を仮定しないため、明示的なキャスト (CGRect){0,5,50,50} でコンパイラを支援する必要があります。これにより、不足している情報がコンパイラに提供されます。

于 2012-05-26T15:33:16.713 に答える
3

これはうまくいくはずです:

self.frame = (CGRect){0, 5, 50, 50};
imageview.center = (CGPoint){100, 120};
于 2012-05-26T15:12:30.667 に答える