我查看了REMenu lib的代码,并发现一些变量声明使用({ ... });这样的形式。看起来像是惰性求值(lazy evaluated code)的闭包(closure)……但我不确定,有人可以解释一下吗?
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;
});
view;
看起来有点奇怪,但我敢打赌如果省略了编译器会抱怨不已。 - bbumself
,但你必须检查代码才能发现这一点,这使得在这里使用语句表达式比函数调用严格更糟糕(在我看来)。 - rob mayoff