Byłem po prostu ciekawy, jak do tego podejdę. Gdybym miał jakąś funkcję i chciałbym, aby coś się wydarzyło, gdy zostanie ona w pełni wykonana, w jaki sposób dodaję to do funkcji? DziękiJak mogę utworzyć funkcję z obsługą zakończenia w Swift?
Odpowiedz
Powiedz, że masz funkcję pobierania, aby pobrać plik z sieci i chcesz otrzymywać powiadomienia po zakończeniu pobierania.
typealias CompletionHandler = (success:Bool) -> Void
func downloadFileFromURL(url: NSURL,completionHandler: CompletionHandler) {
// download code.
let flag = true // true if download succeed,false otherwise
completionHandler(success: flag)
}
// How to use it.
downloadFileFromURL(NSURL(string: "url_str")!, { (success) -> Void in
// When download completes,control flow goes here.
if success {
// download success
} else {
// download fail
}
})
Mam nadzieję, że to pomaga. : -]
byłoby doskonale, ale bardziej z ciekawości zastanawiałeś się, czy mógłbyś w jakiś sposób napisać do swojej funkcji obsługę zakończenia. – traw1233
Hi Floks, Chcę nazwać ten komunikat CompletionHandler z innej funkcji, więc jak to osiągnąć? –
Jestem trochę zdezorientowany, jeśli chodzi o niestandardowe programy obsługi ukończenia. W twoim przykładzie:
Powiedz, że masz funkcję pobierania, aby pobrać plik z sieci i chcesz otrzymywać powiadomienia po zakończeniu pobierania.
typealias CompletionHandler = (success:Bool) -> Void
func downloadFileFromURL(url: NSURL,completionHandler: CompletionHandler) {
// download code.
let flag = true // true if download succeed,false otherwise
completionHandler(success: flag)
}
Twój // download code
nadal będzie prowadził asynchronicznie. Dlaczego kod nie powinien przechodzić od razu do telefonu let flag = true
ani completion Handler(success: flag)
bez czekania na zakończenie pobierania kodu?
W końcu coś musi usiąść i czekać na uruchomienie kodu, to nie jest gigantyczna wieża asynchronicznych słoni w dół. "Asynchroniczny przebieg" oznacza, że istnieją dwa wątki. Jeden z nich siedzi i czeka na wykonanie zadania, a drugi wykonuje i nie robi. Procedura obsługi zakończenia zostanie wywołana, lub przynajmniej zaplanowana, aby zostać wywołana, na końcu wątku, który wykonuje pracę. –
Możemy użyć do tego celu Zamknięcia. Spróbuj następującą
func loadHealthCareList(completionClosure: (indexes: NSMutableArray)->()) {
//some code here
completionClosure(indexes: list)
}
w pewnym momencie możemy wywołać tę funkcję, jak podano poniżej.
healthIndexManager.loadHealthCareList { (indexes) ->() in
print(indexes)
}
Patrz na poniższy link, aby uzyskać więcej informacji na temat Zamknięcia.
Oprócz powyżej: Końcowe zamknięcie mogą być użyte.
Miałem problemy ze zrozumieniem odpowiedzi, więc zakładam, że każdy inny początkujący, jak ja, może mieć taki sam problem jak ja.
Moje rozwiązanie działa tak samo, jak najlepsza odpowiedź, ale mam nadzieję, że jest ono nieco bardziej przejrzyste i łatwe do zrozumienia dla początkujących lub osób mających problemy ze zrozumieniem.
Aby utworzyć funkcję z obsługi realizacji
func yourFunctionName(finished:() -> Void) {
print("Doing something!")
finished()
}
korzystać z funkcji
override func viewDidLoad() {
yourFunctionName {
//do something here after running your function
print("Tada!!!!")
}
}
Twój wynik będzie
Doing something
Tada!!!
Nadzieja to pomaga!
Dziękujemy za poświęcenie czasu na udzielenie tej odpowiedzi. Zrozumiałem to i udało mi się go z powodzeniem wdrożyć. – Jazzmine
Simple Swift 4.0 Przykład:
func method(arg: Bool, completion: (Bool) ->()) {
print("First line of code executed")
// do stuff here to determine what you want to "send back".
// we are just sending the Boolean value that was sent in "back"
completion(arg)
}
Jak go używać:
method(arg: true, completion: { (success) -> Void in
print("Second line of code executed")
if success { // this will be equal to whatever value is set in this method call
print("true")
} else {
print("false")
}
})
- 1. Jak utworzyć prywatną funkcję w Swift?
- 2. Jak mogę utworzyć funkcję dynamicznie?
- 3. utworzyć niestandardową metodę z blokiem zakończenia
- 4. Jak wywołać wieloznaczną funkcję ogólną w Swift?
- 5. Jak mogę utworzyć curried anonimową funkcję w scala?
- 6. Jak wywołać funkcję AWS Lambda w Swift
- 7. Jak utworzyć funkcję Python z opcjonalnymi argumentami?
- 8. Jak utworzyć funkcję opóźnienia javascript
- 9. Czy mogę utworzyć funkcję "extern" c "`?
- 10. Jak mogę powrócić instancetype w Swift
- 11. Czy mogę utworzyć funkcję PHP, którą mogę wywołać bez nawiasów?
- 12. Jak utworzyć zagnieżdżoną funkcję w PL/pgSQL?
- 13. utworzyć funkcję w javascript z niestandardowego prototypu
- 14. Jak programowo utworzyć funkcję R?
- 15. Praca z UILocalNotifications, Zdalne powiadomienia z obsługą zakończenia i Pobieranie w tle
- 16. Czy mogę utworzyć moduł lokalny z menedżerem pakietów Swift?
- 17. SWIFT: Jak utworzyć predykat z wartością Int?
- 18. Jak utworzyć wyliczenie Swift z wartością UIColor?
- 19. Jak utworzyć funkcję szablonu w klasie? (C++)
- 20. Jak najlepiej utworzyć funkcję Timer w R
- 21. Jak utworzyć CG rozmiar w Swift?
- 22. W XCODE/Swift, w jaki sposób mogę utworzyć pojedynczą funkcję, którą można wywołać z różnych kontrolerów widoku?
- 23. jak utworzyć funkcję globalną w szablonie meteorowym
- 24. Jak utworzyć "pustą" anonimową funkcję w MATLAB?
- 25. Jak utworzyć tablicę klasy w Swift
- 26. Jak można programowo utworzyć SplitViewController w Swift?
- 27. Czy mogę utworzyć funkcję globalną w SQL Server?
- 28. Swift - jak utworzyć prawidłową sekcjęForSectionIndexTitle?
- 29. Jak utworzyć instancję NSViewController w Swift?
- 30. utworzyć funkcję lambda z ciągiem ** prawidłowo **
Jest niesamowity film na Youtube: https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source= web & cd = 4 & ved = 0ahUKEwic45WLpN7MAhXJ1CYKHUzKDb8QtwIIMDAD & url = https% 3A% 2F% 2Fwww.youtube.com% 2Fwatch% 3Fv% 3DeoP6yYnlI9Y & usg = AFQjCNFjK7cX7BMh7AkeSrIkaAdAGvjatg & sig2 = 0zbt0TJOzM0GcXYZ6Xv2OA & bvm = bv.122129774, d.eWE & cad = RJT –