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.