Geschiedenis van de vraag: Trailing closure syntax is een syntactische constructie in Swift die is geïntroduceerd om de leesbaarheid van de code te verbeteren bij het gebruik van afsluitende blokken (closures) aan het einde van functies. Het vergemakkelijkt het werken met grote en geneste closures, vooral in een functionele en declaratieve stijl.
Probleem: De standaardverklaring van closures met veel haakjescompliceert de visuele structuur van de code, waardoor deze minder begrijpelijk wordt:
UIView.animate(withDuration: 0.3, animations: { ... })
Naarmate de grootte van de closure toeneemt, wordt deze code minder leesbaar.
Oplossing: Swift staat toe dat de laatste argument-functie buiten de haakjes wordt geplaatst:
UIView.animate(withDuration: 0.3) { // animatieblok }
Als er twee of meer closures zijn, is trailing closure syntax alleen mogelijk voor de laatste closure-parameter, de andere moeten in ronde haakjes worden opgegeven.
Belangrijkste kenmerken:
Kan trailing closure syntax worden toegepast als de closure geen laatste parameter van de functie is?
Nee, alleen de laatste parameter kan als trailing closure worden weergegeven. Als er meer dan één closure nodig is, kan alleen de laatste buiten de haakjes worden geplaatst, de andere worden binnen de ronde haakjes doorgegeven.
func fetch(url: String, completion: () -> Void, onError: () -> Void) fetch(url: "...", completion: { ... }) { // onError }
Kun je de ronde haakjes weglaten bij het aanroepen van een methode met één argument-closure?
Ja, als een functie een enkele argument accepteert dat een closure is, kunnen de haakjes volledig worden weggelaten:
func doWork(action: () -> Void) doWork { print("Taak") }
Kan trailing closure worden gebruikt voor functies met variadic parameters na de closure?
Nee, trailing closure syntax is alleen toepasbaar als de closure de laatste argument is. Er kunnen geen variadic of andere parameters na komen. Het volgende zal een foutmelding geven:
func test(x: () -> Void, y: Int...) // ... aanroep is niet mogelijk met trailing closure
Aanroep met twee closure-parameters zonder trailing syntax, waardoor de methode 5 schermen verticaal in beslag neemt en de complexiteit van het begrijpen toeneemt.
Voordelen:
Nadelen:
In de implementatie van UICollectionViewCompositionalLayout wordt een trailing closure gebruikt — het lay-outblok is gemakkelijk leesbaar, de structuur toont visueel de hiërarchie van lay-outcomponenten aan.
Voordelen:
Nadelen: