15
我正在寻找REMenu lib的代码,并看到一个变量声明为({...}); ..看起来像'封闭'懒惰评估代码..我不知道..有人可以解释我?Objective-C声明变量({...})
self.menuWrapperView = ({
UIView *view = [[UIView alloc] init];
view.autoresizingMask = UIViewAutoresizingFlexibleWidth;
if (!self.liveBlur || !REUIKitIsFlatMode()) {
view.layer.shadowColor = self.shadowColor.CGColor;
view.layer.shadowOffset = self.shadowOffset;
view.layer.shadowOpacity = self.shadowOpacity;
view.layer.shadowRadius = self.shadowRadius;
view.layer.shouldRasterize = YES;
view.layer.rasterizationScale = [UIScreen mainScreen].scale;
}
view;
});
self.toolbar = ({
UIToolbar *toolbar = [[UIToolbar alloc] init];
toolbar.barStyle = self.liveBlurBackgroundStyle;
if ([toolbar respondsToSelector:@selector(setBarTintColor:)])
[toolbar performSelector:@selector(setBarTintColor:) withObject:self.liveBlurTintColor];
toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
toolbar;
});
不错@rob,谢谢。然后,我相信在这种情况下,单个好处是组初始化代码。没有? – seufagner
这很红宝石般,很高兴知道这件事,谢谢Rob。 +1 –
我努力不想这样,但它在我身上越来越大。 @seufagner正确的 - 它有效地说* _menuWrapperView ivar是通过这个自包含的代码块来初始化的,不多不少*。它肯定会使重构更容易(只需抓取任务+整个范围,剪切...滚动...粘贴)。它也很可读。后面的“视图”看起来有点奇怪,但我敢打赌,如果编译器被忽略,编译器会大声抱怨。 – bbum