Sobes.tech
Junior — Middle

È necessario utilizzare un meccanismo di escaping per le closure passate come argomenti di una funzione?

sobes.tech AI

Risposta dell'AI

In Swift, i closure di default sono non-escaping, cioè non possono essere conservati né chiamati dopo che la funzione in cui sono passati si è conclusa.

Se è necessario conservare e chiamare il closure più tardi (ad esempio, in una chiamata asincrona, callback), deve essere contrassegnato come @escaping.

Esempio:

func performAsyncTask(completion: @escaping () -> Void) {
    DispatchQueue.global().async {
        // qualche lavoro
        completion() // chiamare il closure più tardi
    }
}

Se il closure viene usato solo all’interno della funzione e non viene conservato, @escaping non è necessario.

Pertanto, il meccanismo di escaping deve essere usato solo quando il closure può essere chiamato dopo l’uscita dalla funzione a cui è stato passato.