Softwareentwicklung mit Apple Swift: Grundlagen von Swift Concurrency
Mit Version 5.5 erhielt Swift native Funktionen zum parallelen Ausführen. Das Ziel: Fehleranfälligkeit zu reduzieren und Lesbarkeit zu verbessern.
- Thomas Sillmann
Code zu schreiben, der parallel auf verschiedenen Threads ausgeführt wird, ist trotz aller Hilfsmittel noch immer nicht trivial und birgt großes Fehlerpotenzial. Die Programmiersprache Swift aus dem Hause Apple zur Entwicklung von Apps für iOS und Co. stellt in dieser Hinsicht keine Ausnahme dar. Tatsächlich brachte Swift bis zur im September 2021 veröffentlichten Version 5.5 gar keine eigenen Mechanismen mit, um Code parallel auszuführen. Stattdessen kam das Dispatch-Framework zum Einsatz, das zu diesem Zweck diverse Typen und Funktionen enthält, die verschiedene Aktionen gleichzeitig ausführen.
Dieses dreiteilige Tutorial befasst sich mit dem neuen Concurrency-Modell von Swift, das mit der aktuellen Version 5.5 der Programmiersprache eingeführt wurde. In diesem ersten Artikel geht es um die Schlüsselwörter async
und await
, die neue Syntax async let
sowie Task Groups.
Bislang kamen für Parallelität in Swift vor allem Escaping Closures zum Einsatz. So erhielt eine parallel ablaufende Funktion eine Closure als Parameter, die aufgerufen wurde, sobald die Funktion alle Aktionen abgearbeitet hatte. Dieses Konzept bringt zwei Probleme mit sich: Zum einen leidet die Übersichtlichkeit bei verschachtelten Aufrufen, in denen mehrere Closures nacheinander eingesetzt werden. Auch die Reihenfolge der abgearbeiteten Befehle lässt sich bei komplexeren Konstrukten schwer nachvollziehen.