我在类中有属性,我想在运行时懒惰地计算。但是,一旦他们计算出来,他们就不会改变。记忆值是否存在语法糖?现在我到处都有这样的代码:
@property (nonatomic, retain) NSString *bedroomsString;
...
- (NSString *)bedroomsString
{
if (_bedroomsString == nil) {
_bedroomsString = [NSString stringWithFormat:@"%@bd", _bedrooms];
}
return _bedroomsString;
}
我想做一些像
这样的事情@property (nonatomic, retain, memoize) NSString *bedroomsString;
....
- (NSString *)bedroomsString
{
return [NSString stringWithFormat:@"%@bd", _bedrooms];
}
有人知道这样的事吗?
答案 0 :(得分:4)
如果它是单个衬垫,你可以做类似的事情
- (NSString *)bedroomsString
{
return _bedroomsString ?: (_bedroomsString = [NSString stringWithFormat:@"%@bd", _bedrooms]);
}
或者如果一行变得有点过于笨拙,那么你可以使用
- (NSString *)bedroomsString
{
return _bedroomsString ?: ({
_bedroomsString = [NSString stringWithFormat:@"%@bd", _bedrooms]
});
}
本文在NSHipster
中介绍了这两个方面答案 1 :(得分:1)
我猜你可以使用this helper。
例如:
- (NSString *)bedroomsString
{
return _MEMO(bedroomsString, ^{
return [NSString stringWithFormat:@"%@bd", _bedrooms];
})();
}
对你这个相对较小的例子并没有那么多帮助,但是,如果这个例子更大,这可能会有所帮助。