Objective C中是否有可选变量?

Are there Optional variables in Objective C?

我喜欢在 Java 中使用新的 Optional class。 Objective C?

中是否有等价物

我需要一些可以保持像 nil 这样的小值的东西,直到我尝试获取它的值,此时它被初始化并缓存了新值以供我下次读取它时使用。我不想在尝试读取其值的每个点都检查对象是否为 nil

您可以使用 getter 延迟加载变量。

- (MyClass *) something {
    if(!_something) {
        _something = [MyClass new];
    }
    return _something;
}

因此,每次您使用 instance.something 时,它都会为您进行检查并加载对象(如果不存在)。

如果它是一个简单的单行代码并且您根本不想使用 if,您可以跳过关键字(我听说这样更快,但现在无法验证):

- (MyClass *) something {
    return _something ?: (_something = [MyClass new]);
}

这与 Swift 中的展开非常相似,其中 myObject?.aValue 仅当 myObject != nil 时才会 return aValue。或者 if let 语句:if let value = myObject?.aValue

在 objective C 中,没有专门用于此的特定语法,但是您可以使用简单的 if 语句轻松测试是否存在,例如:if(myObject)。因为 Objective-C 对象是指针并且 NULL 指针的地址是 0x0 如果 myObject 是 NULL(或者如果你愿意的话,也可以是 nil),这个 if 语句将计算为 false。

如果您尝试读取 nil 对象的 属性,您同样会得到 nil(对于也是对象的属性)。如果你试图设置一个 nil 对象的 属性,什么也不会发生。

我喜欢尽可能多地使用三元运算符例如:string != nil ? [textField setText:string] : NULL;

如先前答案中所建议,您可以在特定情况下使用惰性实例化。