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