在ObjC中用括号和花括号括起来的几个语句的赋值

ano*_*234 10 syntax objective-c

我正在仔细阅读第三方RESideMenu框架的代码,并注意到一些奇怪的语法似乎工作正常.这是令人困惑的一点:

self.tableView = ({
    UITableView *tableView = [[UITableView alloc] initWithFrame:frame style:UITableViewStylePlain];
    tableView.autoresizingMask = mask;
    tableView.delegate = self;
    tableView.dataSource = self;
    tableView.opaque = NO;
    tableView.backgroundColor = [UIColor clearColor];
    tableView.backgroundView = nil;
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    tableView.bounces = NO;
    tableView.scrollsToTop = NO;
    tableView;
});
Run Code Online (Sandbox Code Playgroud)

这种语法如何工作?我怀疑它与C级块确定有关,但我以前从未见过这个.我也认为它可能是Objc-2.0文字的新功能,但我不认为这是真的.

所以我想我的问题是这是如何工作/使这项工作的原因?

Gav*_*vin 10

NSHipster所述:

魔术背后是GCC C扩展,如果括在括号和圆括号内,会导致代码块返回一个值.

这不仅将配置详细信息分离为初始化,而且附加范围允许在后续初始化中重用通用变量名称,如框架,按钮和视图.没有更多loginButtonFrame = .../signupButtonFrame = ...!