Estoy tratando de entender el "cierre" de Swift con mayor precisión.
Pero @escapingy Completion Handlerson demasiado difíciles de entender
Busqué muchas publicaciones de Swift y documentos oficiales, pero sentí que todavía no era suficiente.
Este es el ejemplo de código de documentos oficiales.
var completionHandlers: [()->Void] = []
func someFunctionWithEscapingClosure(completionHandler: @escaping ()->Void){
    completionHandlers.append(completionHandler)
}
func someFunctionWithNoneescapingClosure(closure: ()->Void){
    closure()
}
class SomeClass{
    var x:Int = 10
    func doSomething(){
        someFunctionWithEscapingClosure {
            self.x = 100
            //not excute yet
        }
        someFunctionWithNoneescapingClosure {
            x = 200
        }
    }
}
let instance = SomeClass()
instance.doSomething()
print(instance.x)
completionHandlers.first?() 
print(instance.x)Escuché que hay dos formas y razones para usar @escaping 
El primero es para almacenar un cierre, el segundo es para fines operativos Async.
Las siguientes son mis preguntas :
Primero, si se doSomethingejecuta, someFunctionWithEscapingClosurese ejecutará con el parámetro de cierre y ese cierre se guardará en la matriz de variables globales.
Creo que el cierre es {self.x = 100}
¿Cómo selfen {self.x = 100} esa variable global guardada completionHandlerspuede conectarse a instanceese objeto de SomeClass?
En segundo lugar, entiendo someFunctionWithEscapingClosureasí.
¡Para almacenar el cierre de la variable local completionHandleren la we usingpalabra clave global 'completeHandlers @ escaping`!
sin devoluciones de @escapingpalabras clave someFunctionWithEscapingClosure, la variable local completionHandlerse eliminará de la memoria
@escaping es mantener ese cierre en la memoria
¿Es esto correcto?
Por último, me pregunto acerca de la existencia de esta gramática.
Quizás esta sea una pregunta muy rudimentaria.
Si queremos que alguna función se ejecute después de alguna función específica. ¿Por qué no llamamos a alguna función después de una llamada a una función específica?
¿Cuáles son las diferencias entre usar el patrón anterior y usar una función de devolución de llamada de escape?


Aquí hay una pequeña clase de ejemplos que utilizo para recordarme cómo funciona @escaping.
fuente
@escapingeliminatorias.i.e. escape the scope of this function.