Swift Closures: como escapar explicado

Você já se perguntou o que significa @escaping ao trabalhar com encerramentos no Swift?

Foto de Clément Hélardot no Unsplash

No Swift, os fechamentos são sem escape por padrão.

Um fechamento sem escape é chamado imediatamente na função para a qual é passado. A vida desse fechamento termina quando a chamada de função é concluída. Como resultado, nunca mais haverá vestígios desse fechamento.

Mas esse comportamento padrão de um fechamento pode ser um problema quando você está executando um código assíncrono. Isso é melhor demonstrado por um exemplo muito simples. Então, vamos direto ao assunto.

Exemplo de fechamento de escape

Digamos que você esteja trocando mensagens com seu amigo e pergunte “Como vai você?”. Como você sabe, seu amigo demora um pouco para responder. Digamos que leva 2 segundos, por exemplo.

Agora você quer simular essa conversa amigável no Swift.

Você precisa de uma função que receba um fechamento do manipulador de resposta como parâmetro. Este manipulador de resposta é simplesmente responsável por imprimir a resposta do seu amigo que chega 2 segundos depois:

func howAreYou(_ responseHandler: (String) -> Void) {
    print("Hey, how are you?") // you ask how are you
  
    // Simulating how it takes 2 seconds for your friend to answer:
DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: {
        responseHandler("Hi, I'm doing really good.")
    })
  
    print("Responding takes a while...")
}
howAreYou({ friendResponse in
    print(friendResponse)
})

Isso significa que o responseHandlerseria destruído antes que a resposta do seu amigo chegasse.

Portanto, o problema é que responseHandlerele nunca teria a chance de lidar com a resposta do seu amigo porque seria destruído antes que a resposta 'chegasse'.

Agora você pode se perguntar se há uma maneira de terminar a execução desta função, mas manter o responseHandlervivo de alguma forma para que seja capaz de lidar com a resposta... Bem, é exatamente isso que os @escapingencerramentos fazem.

Agora, para usar um fechamento de escape, basta marcar o responseHandlerfechamento @escaping da seguinte forma:

func howAreYou(_ responseHandler: @escaping (String) -> Void) {
    print("Hey, how are you?") // you ask how are you
  
    // It takes 2 seconds for your friend to answer:
DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: {
        responseHandler("Hi, I'm doing really good.")
    })
  
    print("Responding takes a while...")
}
howAreYou({ friendResponse in
    print(friendResponse)
})

É tão simples quanto isso! Agora seu responseHandlerfechamento é capaz de mostrar a resposta do seu amigo, pois pode sobreviver ao howAreYouescopo da função!

Quando os fechamentos de escape são realmente úteis

Os fechamentos de escape são úteis sempre que você deseja que o fechamento seja capaz de viver fora do escopo da função de onde você o está chamando.

Por exemplo, ao lidar com solicitações de rede, por exemplo, ao buscar alguns dados de um servidor, levará algum tempo para que a solicitação de rede seja concluída e a resposta chegue.

Se você quiser executar algumas ações com a resposta da rede, precisará de um encerramento de escape para fazer o manipulador de resposta viver fora da chamada de função de solicitação para manipular a resposta, por exemplo, 2 segundos depois.

É isso!

Espero que você ache útil. Dê palmas para que outros também o encontrem!

Certifique-se de me seguir no Medium para não perder nada. Além disso, vamos ser amigos no Linkedin .

Você Também Pode Estar Interessado

Swift — encerramentos simplificados

Referências

Suggested posts

Abordagem em duas etapas para alta energia e foco

Abordagem em duas etapas para alta energia e foco

Passo 1 Conserte seu intestino. O youtube abaixo tem bons conselhos.

Um dia em Falsettoland. Parte um.

Um dia em Falsettoland. Parte um.

- Manhã. Mergulhando minha caneta em sangue.

Related posts

Journal Ouvert

Journal Ouvert

Diário aberto: uma foto por dia. Sempre fui fascinado por histórias.

A Mentira do Cowboy

Como as megacorporações venderam aos americanos uma mentira robusta

A Mentira do Cowboy

É uma manhã brilhantemente dourada nas colinas do oeste, enquanto os primeiros raios de sol iluminam a grama congelada nas planícies. Um rebanho de gado Angus plácido, preto e maciço, é recortado contra o nascer do sol enquanto segue por uma trilha batida até um local que todos conhecem bem; a barra de café da manhã.

Coletando OSINT para caçar ameaças

Coletando OSINT para caçar ameaças

Olá, entusiastas cibernéticos! Bem-vindo de volta ao OSINT para a série de caça a ameaças. No primeiro artigo, apresentei uma visão geral do OSINT e sua importância na caça às ameaças.

"A Fossa das Marianas Revelada: Revelando as Terríveis Verdades Ocultas do Abismo"

"A Fossa das Marianas Revelada: Revelando as Terríveis Verdades Ocultas do Abismo"

Introdução:Bem-vindos, corajosos leitores, a uma jornada que nos levará às profundezas mais sombrias do nosso planeta. Neste blog, mergulhamos no mundo enigmático da Fossa das Marianas, revelando seus segredos ocultos e revelando as verdades arrepiantes que se escondem sob sua superfície.