gpt4 book ai didi

objective-c - Ruby ||= Objective-C 中的等价物

转载 作者:数据小太阳 更新时间:2023-10-29 07:02:54 26 4
gpt4 key购买 nike

我最近一直在学习 ruby​​,并且基本上爱上了 ||= 特性,因为它可以使在 Objective C 中编写惰性 getter 变得更加容易。

目前我写的 getter 如下:

- (NSArray *)myArray {
if (!_myArray) {
_myArray = [NSArray array];
}
return _myArray
}

除非我遗漏了 ||= 的某些内容,否则我将能够使用 Ruby 编写以前的代码:

- (NSArray *)myArray {
return _myArray ||= [NSArray array];
}

那显然更干净了。 Objective-C 语言/运行时中是否有任何东西可以让您做到这一点?

此外,以下是 getter 的单行三元组,我不确定它是否与上面发布的经过验证的方法(第一个片段)一样有效。有人可以告诉我这样做是否有问题吗:

- (NSArray *)myArray {
return _myArray = _myArray ? _myArray : [NSArray array];
}

最佳答案

最后一个片段与您发布的第一个片段具有相同的效果。

作为改进,虽然在 Objective-C 中没有像 ||= 这样的运算符,但您可以省略三元运算符的第二个参数 if 运算符和 do

return _myArray = _myArray ?: [NSArray array];

这完全等同于

return _myArray = _myArray ? _myArray : [NSArray array];

这是现代版本支持的语言扩展 gccclang .

奖励:如果你想节省更多的击键,你可以这样做

- (NSArray *)myArray {
return _myArray = _myArray ?: @[];
}

附带说明,跳过中间操作数也有一些好处。

例如在这种情况下

id x = [self someMethod] ? [self someMethod] : [self anotherMethod];

如果 someMethod 评估为 true 它将被调用两次,而 doing

id x = [self someMethod] ?: [self anotherMethod];

它只会被调用一次。

关于objective-c - Ruby ||= Objective-C 中的等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19602374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com