参见英文答案 >
How is this form of scoping called? 1
我正在阅读第三方RESideMenu框架的代码,并注意到一些奇怪的语法似乎工作正常.这是令人困惑的一点:
我正在阅读第三方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; });
这个语法如何工作?我怀疑它与C级块的范围有关,但我从未见过这个.我也认为这可能是Objc-2.0文字的新功能,但我不认为这是真的.
所以我想我的问题是这是如何工作/什么使这项工作?
解决方法
如
NSHipster所述:
Behind the magic is a GCC C extension,which causes a code block to return a value if enclosed within brackets and parentheses.
This not only segregates configuration details into initialization,but the additional scope allows generic variable names like frame,button,and view to be reused in subsequent initializations. No more loginButtonFrame = … / signupButtonFrame = …!