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

它正在测试该值是否已初始化(指针不等于 0;运算符!等效于 Objective-C中的NOT运算符)。如果origin分配了 XYPoint 类的对象,它将指向对象的地址而不是 0。

亲切的问候,

于 2012-05-28T14:34:31.803 回答
0

在这种情况下,它只是检查 origin 是否已经初始化。未初始化的指针为0x0,基本为0,在汇编级别等于false。

于 2012-05-28T14:34:39.863 回答
0

!表示“不是”,因此“if (!origin)”翻译为“if not origin”,并且正在测试 origin 是否具有值。该运算符在不同语言之间的含义会有所不同,但在 Objective-C 中,如果 origin 设置为 0,(!origin) 将返回 true。它必须已声明,否则您的代码将崩溃。在动态语言中,您可以使用此运算符来测试变量是否已声明以及它是否包含值。

于 2012-05-28T14:36:37.790 回答
0

!通常用于测试not. 大多数情况下,您会发现它在测试应该评估为真或假的条件时使用。然后!操作员将反转该值。

除了 false、0 或 nil(或 null,取决于语言)之外的任何值通常被认为是 true。例如,如果我有x = 5并且我测试if (x)了,if 语句的 true 条件将被执行,因为x它的值不是 false 或 nil。

在这种特殊情况下,它看起来好像origin是一个指向对象的指针。因此,如果它指向一个对象,它将有一个整数指针的非零值(类似于 0x??????)。测试也是如此(! origin),“我的变量原点是否指向另一个对象,或者它是否为零。” 如果是这样,则代码确定将新值分配给 origin 是可以接受的。但是,如果之前设置了原点,则此代码不会为其分配新值。

于 2012-05-28T14:37:55.110 回答