Ответ 1
Это GNU (нестандартное) расширение языка C, называемое выражением выражения . Синтаксис поддерживается gcc, clang и несколькими другими компиляторами.
В принципе, он позволяет обрабатывать произвольный блок как одно выражение, значением которого является значение последнего оператора в блоке.
Это расширение в основном полезно для макросов. На мой взгляд, код, цитируемый вами в вашем вопросе (из метода showFromRect:inView:
в REMenu.m
), был бы лучше, если бы он использовал не выражения выражений оператора. Вместо этого код в этих выражениях выражений следует разделить на отдельные методы. Например:
self.menuWrapperView = [self newMenuWrapperView];
self.toolbar = [self newToolbar];
...
- (UIView *)newMenuWrapperView {
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;
}
return view;
}
- (UIToolbar *)newToolbar {
UIToolbar *toolbar = [[UIToolbar alloc] init];
toolbar.barStyle = self.liveBlurBackgroundStyle;
if ([toolbar respondsToSelector:@selector(setBarTintColor:)])
[toolbar performSelector:@selector(setBarTintColor:) withObject:self.liveBlurTintColor];
toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
return toolbar;
}