【发布时间】:2014-02-25 18:31:52
【问题描述】:
我正在阅读第三方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 文字的一个新功能,但我认为这不是真的。
所以我想我的问题是它是如何工作的/是什么让它工作的?
【问题讨论】:
-
顺便说一句,我也有同样的问题;你可能想看看这个线程:lists.apple.com/archives/xcode-users/2013/Aug/msg00027.html
-
最后我决定不在我自己的代码中使用它。但请注意,如果您只想限制临时变量声明的范围,那么单独使用花括号也可以获得类似的效果。
-
有兴趣知道,感谢您的信息!我一直在寻找很长一段时间 - 我喜欢它在逻辑上分离初始化代码,在我看来让它看起来更干净:)
-
还有一个注意事项:我不信任这些 GCC 扩展。我多年来一直依赖这个:gcc.gnu.org/onlinedocs/gcc/… 然后苹果撤回了它,我所有的代码都坏了。所以我说再也不会了!
标签: objective-c syntax