J'essaie de comprendre plus précisément la «fermeture» de Swift.
Mais @escapinget Completion Handlersont trop difficiles à comprendre
J'ai recherché de nombreux messages et documents officiels Swift, mais je pensais que ce n'était toujours pas suffisant.
Ceci est l'exemple de code des documents officiels
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)
J'ai entendu dire qu'il y a deux façons et raisons d'utiliser @escaping
Le premier est pour stocker une fermeture, le second est pour le fonctionnement Async.
Voici mes questions :
Premièrement, si doSomethings'exécute, alors someFunctionWithEscapingClosures'exécutera avec le paramètre de fermeture et cette fermeture sera enregistrée dans un tableau de variables globales.
Je pense que la clôture est {self.x = 100}
Comment selfdans {self.x = 100} qui enregistré dans la variable globale completionHandlerspeut se connecter à instancecet objet de SomeClass?
Deuxièmement, je comprends someFunctionWithEscapingClosurecomme ça.
Pour stocker la fermeture de variable locale completionHandlerdans le we usingmot-clé de la variable globale 'completionHandlers @ escaping`!
sans retour de @escapingmot-clé someFunctionWithEscapingClosure, la variable locale completionHandlersupprimera de la mémoire
@escaping est de garder cette fermeture dans la mémoire
Est-ce correct?
Enfin, je m'interroge simplement sur l'existence de cette grammaire.
C'est peut-être une question très rudimentaire.
Si nous voulons qu'une fonction s'exécute après une fonction spécifique. Pourquoi n'appelons-nous pas simplement une fonction après un appel de fonction spécifique?
Quelles sont les différences entre l'utilisation du modèle ci-dessus et l'utilisation d'une fonction de rappel d'échappement?
