【问题标题】:Assignment of several statements enclosed in parentheses and curly braces in ObjC [duplicate]ObjC中括号和花括号中的几个语句的赋值[重复]
【发布时间】: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


【解决方案1】:

NSHipster 所述:

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

这不仅将配置细节分离到初始化中,而且额外的范围允许在后续初始化中重复使用框架、按钮和视图等通用变量名称。不再有 loginButtonFrame = ... / signupButtonFrame = ...!

【讨论】:

  • 感谢您的回答! @加文
猜你喜欢
  • 2019-07-11
  • 1970-01-01
  • 2014-11-26
  • 2021-11-20
  • 2019-01-26
  • 1970-01-01
  • 2016-12-21
  • 2017-06-14
  • 2012-05-03
相关资源
最近更新 更多