[Swift]Postój i obsługa zakończeń Swift @
Witam Próbuję lepiej zrozumieć "Zamknięcie" Swift.
Ale @escaping
i Completion Handler
są zbyt trudne do zrozumienia
Szukałem wielu księgowań oraz oficjalne dokumenty Swift, ale stil odczuwalne nie tyle
To jest przykład kodu z dokumentów urzędowych
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)
Słyszałem, że istnieją dwa sposoby i powody używania @esacping
Pierwsze s torowania zamknięcie, drugie jest asynchroniczny cel operacyjny
I od teraz są moje pytania
Po pierwsze, jeśli doSomething
wykonywania następnie someFunctionWithEscapingClosure
będzie wykonanie z parametrem zamknięcia i zamknięcie zostanie zapisany w zmiennej globalnej tablicy.
myślę, że zamknięcie jest {self.x = 100}
Jak self
w {100} = self.x że zapisanego w zmiennej globalnej completionHandlers
może połączyć się instance
że przedmiotem SomeClass
?
Po drugie, rozumiem tak: someFunctionWithEscapingClosure
.
Aby zapisać lokalną zmienną zamknięcia completionHandler
do zmiennej globalnej "completionHandlers` używamy słowa kluczowego @escaping!
bez @escaping słów kluczowych someFunctionWithEscapingClosure
powroty, zmienna lokalna completionHandler
usunie z pamięci
@escaping jest utrzymać to zamknięcie w pamięci
Czy to prawda?
Wreszcie, po prostu zastanawiam się nad istnieniem tej gramatyki.
Może jest to bardzo prymitywny pytanie
jeśli chcemy jakiejś funkcji wykonującego po jakiejś konkretnej funkcji
dlaczego nie możemy po prostu zadzwonić po jakąś funkcję wywołania konkretnej funkcji
jakie są różnice między używaniem powyższego wzorca a korzystaniem z funkcji oddzwaniania zwrotnego
dziękuję za przeczytanie długich pytań i przepraszam za to, że nie jestem tubylcem
linki były bardzo pomocne –
Dzięki, cieszyć się kodowania w Swift –