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;
如先前答案中所建议,您可以在特定情况下使用惰性实例化。
我喜欢在 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;
如先前答案中所建议,您可以在特定情况下使用惰性实例化。