Como é chamada essa forma de escopo? [duplicado
Esta pergunta já tem uma resposta aqui:
Objective-C Declare vars com ({…}) 1 respostaMais ou menos por acidente, me deparei com essa forma de escopo
DataSource *dataSource =({
NSInteger idx = [[self.tableView indexPathForSelectedRow] row];
DataSource *dataSource = [DataSource new];
dataSource.address = self.destinations[idx][0];
dataSource.name = self.destinations[idx][1];
dataSource;
});
Acho que é uma boa maneira de criar e instanciar objetos e variáveis, pois as variáveis temporárias permanecerão apenas enquanto forem necessárias para criar o objeto de que realmente preciso e me importo. No código acimaidx
desaparecerá assim que eu escrever o interidataSource
para o exteriordataSource
, pois o escopo será deixado logo depoi
Também acho interessante o fato de que um objeto totalmente instanciado e configurado será definido como o objeto extern
Na verdade, eu nem sei se esse é um recurso C ou Objective-C ou um doce de sintaxe adicionado ao clan
@ Unheilig
esta é uma sintaxe para organizar o código. não é algo como um bloqueio ou fechamento. no final do código, você apenas tem um objeto totalmente instanciado e configurad
Isso é útil se você precisar de um objeto apenas para passá-lo como argumento a um método, mas a configuração desse objeto leva mais de uma instrução. Em vez de atribuí-lo a uma variável temporária local, você pode passar uma expressão de instruçã
[[MYViewController alloc] initWithDataSource:({
NSInteger idx = [[self.tableView indexPathForSelectedRow] row];
DataSource *dataSource = [DataSource new];
dataSource.address = self.destinations[idx][@"address"];
dataSource.name = self.destinations[idx][@"name"];
dataSource;
})];
Em um ambiente não-ARC, você pode chamar a liberação automática dentro da instrução de expressã
Então, trata-se de organização de códigos e muito gosto pessoal, eu ach