fazemos muito trabalho assíncrono em dispositivos móveis em um esforço para impedir que nosso código bloqueie o thread principal. Anteriormente, isso significava muitos métodos delegados, mas avanços mais recentes no Objective-C nos permitiram retornar valores aos blocos como manipuladores de conclusão. Sem dúvida, teremos que fazer muito disso no swift também.

aqui está uma definição de função de Objective-C que faz uso do padrão de bloco de conclusão e da sintaxe associada para usá-lo:

- (void)hardProcessingWithString:(NSString *)input withCompletion:(void (^)(NSString *result))block;;

obrigado porra sintaxe Bloco! Nunca me lembro dessas coisas

Swift tem a oportunidade de melhorar isso, pois não precisa ser uma adição de linguagem pós-pensada, pode ser cozido desde o início.

o resultado pode parecer complexo (como todas as declarações functions-in-function), mas é realmente simples. É apenas uma definição de função que usa uma função como argumento, então, desde que você entenda o aninhamento, isso deve ficar claro rapidamente:

func hardProcessingWithString(input: String, completion: (result: String) -> Void) {...completion("we finished!")}

o fechamento de conclusão aqui é apenas uma função que pega uma string e retorna void. No início, isso soa para trás-isso leva uma string como argumento? Queremos devolver uma corda! – mas nós realmente não queremos retornar uma string, isso significaria que bloqueamos até voltarmos. Em vez disso, estamos chamando uma função que o callee nos deu e fornecendo-lhes os argumentos associados.

usar manipuladores de conclusão é mais fácil do que declará-los, graças a uma maneira inteligente de encurtar as chamadas de função da equipe swift:

hardProcessingWithString("commands") {(result: String) inprint("got back: \(result)")}

este é um encerramento final, algo que podemos usar sempre que o último argumento for um encerramento. Usando a sintaxe um tanto estranha {() in }, temos magicamente os resultados de que passamos o fechamento de volta em nossa função assíncrona. Eu realmente ainda tenho que sondar as profundezas do swift para entender o que faz essa sintaxe funcionar, mas por enquanto estou feliz que funcione.

Deixe uma resposta

O seu endereço de email não será publicado.