Byłem po prostu ciekawy, jak podejdę do tego. Gdybym miał funkcję i chciałbym, żeby coś się wydarzyło po jej całkowitym wykonaniu, jak dodałbym to do funkcji? Dzięki
function
swift
completionhandler
traw1233
źródło
źródło
Odpowiedzi:
Załóżmy, że masz funkcję pobierania umożliwiającą pobranie pliku z sieci i chcesz otrzymać powiadomienie o zakończeniu zadania pobierania.
Mam nadzieję, że to pomoże.
źródło
Miałem problemy ze zrozumieniem odpowiedzi, więc zakładam, że każdy inny początkujący, taki jak ja, może mieć ten sam problem co ja.
Moje rozwiązanie działa tak samo jak najlepsza odpowiedź, ale mam nadzieję, że jest trochę jaśniejsze i łatwiejsze do zrozumienia dla początkujących lub osób mających problemy ze zrozumieniem.
Aby utworzyć funkcję z obsługą zakończenia
użyć funkcji
Twoje wyjście będzie
Mam nadzieję że to pomoże!
źródło
Prosty przykład Swift 4.0:
Jak tego użyć:
źródło
W tym celu możemy użyć Zamknięcia . Spróbuj wykonać następujące czynności
W pewnym momencie możemy wywołać tę funkcję, jak podano poniżej.
Więcej informacji na temat zamknięć można znaleźć pod poniższym linkiem .
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html
źródło
Swift 5.0 +, prosty i krótki
przykład:
Styl 1
Styl 2
Posługiwać się:
Wynik
źródło
Jestem trochę zdezorientowany co do niestandardowych programów obsługi zakończenia. W twoim przykładzie:
Załóżmy, że masz funkcję pobierania umożliwiającą pobranie pliku z sieci i chcesz otrzymać powiadomienie o zakończeniu zadania pobierania.
Twój
// download code
będzie nadal uruchamiany asynchronicznie. Dlaczego kod nie trafiłby prosto do Ciebielet flag = true
icompletion Handler(success: flag)
nie czekałby na zakończenie pobierania?źródło
Oprócz powyższego: można zastosować zamknięcie końcowe .
źródło