逻辑运算符 Objective-C

Logic operator Objective-C

伙计们,有人可以解释一下 if (!origin) 是什么意思吗!

-(void) setOrigin: (XYPoint *) pt {
        if (! origin)
        origin = [[XYPoint alloc] init];
        origin.x = pt.x; origin.y = pt.y;
        }

如果没有出处。 if 语句中的“!”表示如果这不是真的。

你的代码是做什么的,它检查是否有一个来源,如果没有它会创建一个新的。这样做很好的原因是你不想制作不止一个来源。

希望这对您有所帮助。如果您还有其他问题,请随时提问。 :)

发布的代码读起来很有趣。在外部,该方法似乎承诺将某些对象的 origin 属性 设置为传递点 (pt) 的值。在内部,它似乎只有在原点 属性 尚未设置时才会这样做。

关于'!' bang or not 运算符,在最低级别,!测试非零。当应用于布尔值时,例如实际上是标量 1 或 0 的 YES 或 NO,它充当逻辑 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

这个成语的一个常见用法是懒惰 getter。属性最初为 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;
}