38

プロパティがまだ設定されているかどうかをテストしようとしています。私が持っているオブジェクトでそれを知っています:

CGRect ppGoalFrame;
LocalPlaySetup *localPlaySetup;

そして私はテストすることができます

if (localPlaySetup == nil)

しかし、== nil または == NULL で CGRect をテストしようとすると

if (ppGoalFrame == nil)

私は得る

invalid operands to binary == (have 'CGRect' and 'void *')

それで、CGRect「空」、null、nil...ですか?セット前?明らかに、CGrect を void ポインターと比較することはできません (使用できませんppGoalFrame == void)。これをテストする別の方法はありますか?これまでのところ、Objective-C は非常に理解しやすいものですが、C が登場するとすぐに、少し迷ってしまいます。

4

7 に答える 7

5

からCGGeometry.h:

/* Return true if `rect' is empty (that is, if it has zero width or height),
   false otherwise. A null rect is defined to be empty. */

空の四角形は、一辺または両辺がゼロの領域を持たない四角形です。
代わりに使用してください:

CGRect newRect = CGRectNull;
于 2011-11-07T12:23:41.497 に答える
2

NSValue で CGRect をラップすることもできます。

[NSValue valueWithCGRect:CGRectMake(x, y, width, height)]

そして、nil値を避けます。

于 2013-04-01T16:41:19.963 に答える
2

普遍的な「無」の価値はありません。nilオブジェクト用とポインター用がありNULLますが、単純な値型に相当するものはありません — それらは、意味のないものであっても、常に何らかの値を持っています。任意の値を取り、「これをこの型の null 値と呼ぶことにします」と言うことができます (たとえば、#define IntNull 4444444何らかの計算で誤ってその値が返されないことを願っています) が、実際の null 値はありません。

特に CGRect の場合、Apple は「任意の値を選択する」戦術を使用して を定義CGRectNullしましたが、CGRect 変数はデフォルトではそのように設定されていません。具体的に自分で設定する必要があります。デフォルトでは、CGRect インスタンス変数は に設定されてCGRectZeroいますが、これは位置 (0,0) にある幅 0、高さ 0 の通常の CGRect 構造体であることに注意してください。また、関数内のローカル CGRect は、まったく予測できない値を持ちます。

于 2010-03-10T06:43:37.527 に答える