逻辑运算符Objective-C
伙计们,谁能给我解释一下如果发生了什么!来源意味着请逻辑运算符Objective-C,objective-c,logic,Objective C,Logic,伙计们,谁能给我解释一下如果发生了什么!来源意味着请 -(void) setOrigin: (XYPoint *) pt { if (! origin) origin = [[XYPoint alloc] init]; origin.x = pt.x; origin.y = pt.y; } 如果没有来源的话在if语句中,表示如果这不是真的 您的代码所做的是检查是否存在原点,如果没有原点,它将创建一个新原点。这样做很好的原因是因为您
-(void) setOrigin: (XYPoint *) pt {
if (! origin)
origin = [[XYPoint alloc] init];
origin.x = pt.x; origin.y = pt.y;
}
如果没有来源的话在if语句中,表示如果这不是真的
您的代码所做的是检查是否存在原点,如果没有原点,它将创建一个新原点。这样做很好的原因是因为您不想制作多个原点
希望这有帮助。如果您还有任何问题,请随时提问: 张贴的代码读起来很有趣。从外部看,该方法似乎承诺将某个对象的原点属性设置为传递点pt的值。在内部,似乎只有在尚未设置“原点”特性时才会这样做 关于‘!’“砰”或“不”操作符,在最低级别!非零的测试。当应用于布尔值时,如YES或NO,它们实际上是标量1或0,它充当逻辑NOT运算
!YES is the same as !1 and equals NO
!NO is the same as !0 and equals YES
在问题的代码中!习惯性地应用于非标量值和对象指针,但它在低级执行相同的操作,测试非零性,在本例中为非零:
SomeObject *someObject = nil;
!someObject is the same as !nil and the same as !0 and equals YES
如果已分配对象,则指针someObject具有非零值,因此
SomeObject *someObject = [SomeObject alloc];
!someObject equals NO
这个习惯用法的一个常见用法是lazygetter。属性最初为nil,然后在第一次请求时提供非nil值
- (NSString *)someStringProperty {
if (!_someStringProperty) {
// this runs the first time, but not again because we set
// _someStringProperty to be non-nil here
_someStringProperty = @"hello world";
}
return _someStringProperty;
}
你看过语言文档了吗?