我不明白使用! 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
答案 0 :(得分:0)
它正在测试值是否已初始化(指针不等于0;运算符!
等同于Objective-C中的 NOT 运算符)。如果分配了类XYPoint的对象origin
,它将指向对象的地址而不是0.
亲切的问候,
博
答案 1 :(得分:0)
在这种情况下,它只检查原点是否已初始化。未初始化的指针是0x0,基本上是0,在汇编程序级别等于false。
答案 2 :(得分:0)
!意思是'不'所以“if(!origin)”翻译为“if not origin”并且正在测试origin是否有值。此运算符在语言之间的含义不同,但在Objective-C中,如果origin设置为0,则(!origin)将返回true。必须已声明,否则您的代码将崩溃。在动态语言中,您可以使用此运算符来测试变量是否已声明是否包含值。
答案 3 :(得分:0)
!
通常用于测试not
。大多数情况下,您会发现在测试应该评估为真或假的条件时使用它。然后!
运算符将反转该值。
除了false,0或nil(或取决于语言的null)之外的任何内容通常都被认为是真的。例如,如果我有x = 5
并且我测试if (x)
,那么if语句的真实条件将被执行,因为x
只有一个非false或nil的值。
在这种特殊情况下,看起来好像origin
是指向对象的指针。因此,如果它指向一个对象,它将具有一个整数指针的非零值(类似于0x ??????)。所以(! origin)
正在测试,“我的变量原点是否指向另一个对象,或者它是否为零。”如果是,则代码确定可以为源分配新值。但是,如果先前已设置origin,则此代码不会为其分配新值。