Назначение нескольких операторов, заключенных в круглые скобки и фигурные скобки в ObjC
Я просматривал код сторонней структуры 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, но я не думаю, что это правда.
Итак, я думаю, мой вопрос в том, как это работает/что заставляет это работать?
Ответы
Ответ 1
Как упоминалось в NSHipster:
За магией используется расширение GCC C, которое заставляет блок кода возвращать значение, если оно заключено в скобки и круглые скобки.
Это не только разделяет детали конфигурации на инициализацию, но и дополнительная область позволяет повторять использование имен универсальных переменных, таких как кадр, кнопка и представление, при последующих инициализациях. Нет больше loginButtonFrame =.../signupButtonFrame =...!