[Swift]Gestionnaire d'échappement et de complétion Swift @
Bonjour, J'essaie de mieux comprendre la 'fermeture' de Swift.
Mais @escaping
et Completion Handler
sont trop difficiles à comprendre
Je cherchai de nombreux messages et documents officiels de Swift, mais je me sentais Stil pas assez
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 qu'il y a deux façons et raisons d'utiliser @esacping
Premières s fermeture Toring, le second est Async objectif d'exploitation
Et, à partir de maintenant ils sont mes questions
Tout d'abord, si doSomething
puis en exécutant someFunctionWithEscapingClosure
va exécuter avec le paramètre de fermeture et que la fermeture sera enregistrée dans le tableau variable globale.
Je pense que la fermeture est {100} = self.x
Comment self
dans {self.x = 100} qui a sauvé dans la variable globale completionHandlers
peut se connecter à instance
cet objet de SomeClass
? Deuxièmement, je comprends someFunctionWithEscapingClosure
comme ceci.
Pour stocker la fermeture de variable locale completionHandler
à la variable globale 'completionHandlers` nous utilisons le mot clé @escaping!
sans @escaping mot-clé someFunctionWithEscapingClosure
rendement, variable locale completionHandler
enlèvera de la mémoire
@escaping est de garder cette fermeture dans la mémoire
Est-ce exact?
Enfin, je m'interroge sur l'existence de cette grammaire.
Peut-être que cela est une question très rudimentaire
si nous voulons une exécution de la fonction après une fonction spécifique
pourquoi ne pas nous suffit d'appeler une fonction après appel de fonction spécifique
ce sont les différences entre l'utilisation de modèle ci-dessus et en utilisant la fonction de rappel d'échappement
merci de lire de longues questions et désolé pour je ne suis pas natif
vos liens ont été très utiles –
Merci, profitez de codage à Swift –