最近我一直在学习Ruby,并且非常喜欢 ||= 特性,因为它可以让我更轻松地编写Objective C中的lazy getters。
目前,我编写的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];
}
_myArray = [NSArray array];
呢?再次强调,这只是一个不懂Objective C的人提出的潜在建议 :p - DavidNSArray
并将其存储在_myArray
中;于是就会发生一些有趣的事情。 - jscs