2

の使い方がわかりません!if (! origin) の演算子。著者は、インスタンス変数 origin の値がゼロでないかどうかをテストしていると説明しましたが、それが何を意味するのかよくわかりません。

#import <Foundation/Foundation.h>

@interface XYPoint : NSObject 
@property int x, y;

@end

#import "XYpoint.h"

@implementation XYPoint
@synthesize x, y;

@end

#import <Foundation/Foundation.h>

@class XYPoint;
@interface Rectangle: NSObject

-(XYPoint *) origin;
-(void) setOrigin: (XYPoint *) pt; 
@end

#import "Rectangle.h"
#import "XYpoint.h"

@implementation Rectangle {
    XYPoint *origin;
}

-(void) setOrigin:(XYPoint *)pt {
    if (! origin)
    origin = [[XYpoint alloc] init];

origin.x = pt.x;
origin.y = pt.y
}
-(XYPoint *) origin {
    return origin;
}

@end
4

4 に答える 4

0

!「not」を意味するので、「if(!origin)」は「ifnot origin」と解釈され、originに値があるかどうかをテストしています。この演算子の意味は言語によって異なりますが、Objective-Cでは、originが0に設定されている場合、(!origin)はtrueを返します。宣言されている必要があります。宣言されていない場合、コードがクラッシュします。動的言語では、この演算子を使用して、変数が宣言されているかどうか、および変数が値を保持しているかどうかをテストできます。

于 2012-05-28T14:36:37.790 に答える
0

!通常、のテストに使用されnotます。ほとんどの場合、trueまたはfalseと評価される条件をテストするときに使用されます。その後、!オペレーターはその値を逆にします。

false、0、またはnil(または言語によってはnull)以外のものがtrueと見なされるのはよくあることです。たとえば、私が持っていx = 5てテストif (x)した場合、ifステートメントのtrue条件はx、falseまたはnil以外の値を持つだけで実行されます。

originこの特定のケースでは、オブジェクトへのポインタのように見えます。したがって、オブジェクトを指している場合は、整数ポインター(0x ??????など)のnil以外の値になります。テストもそう(! origin)です、「私の変数の原点は別のオブジェクトを指しているのですか、それともゼロですか?」その場合、コードは、originに新しい値を割り当てることが許容できると判断します。ただし、originが以前に設定されている場合、このコードはそれに新しい値を割り当てません。

于 2012-05-28T14:37:55.110 に答える
0

値が初期化されているかどうかをテストしています (ポインターは 0 ではありません。演算子は Objective-C のNOT!演算子と同等です)。クラス XYPoint のオブジェクトが割り当てられている場合、0 ではなくオブジェクトのアドレスを指します。origin

敬具、
ボー

于 2012-05-28T14:34:31.803 に答える
0

この場合、origin が初期化されているかどうかを確認するだけです。初期化されていないポインターは 0x0 です。これは基本的に 0 であり、アセンブラー レベルでは false に相当します。

于 2012-05-28T14:34:39.863 に答える