Neuerungen in SwiftUI – Teil 1

refreshable-Modifier

Auf der WWDC 2021 stellte Apple einige spannende Neuerungen in Bezug auf das SwiftUI-Framework vor. Auch wenn es sich bei diesen Neuerungen primär um kleinere Ergänzungen handelt, tragen die mit Sicherheit doch einen großen Teil dazu bei, die App-Entwicklung mit SwiftUI weiter zu verbessern und uns Entwicklern den Alltag ein wenig zu erleichtern.

Eine dieser spannenden Ergänzungen ist der neue refreshable(_:)-Modifier. Er lässt sich auf scrollbare Elemente wie Listen anwenden und ergänzt diese um eine Pull-to-Refresh-Geste. Diese Geste ist bereits seit langem in iOS etabliert und dient dazu, neue Daten zu laden oder bestehende zu aktualisieren.

Der refreshable(_:)-Modifier nimmt ein Closure entgegen, das die Ausführung asynchroner Tasks erlaubt. Kommt in der zugehörigen Liste dann die Pull-to-Refresh-Geste zum Einsatz, werden die Befehle dieses Closures ausgeführt. Der Activity Indicator am oberen Rand bleibt dabei so lange aktiv, bis die Befehle erfolgreich abgearbeitet wurden.

Ein simples Beispiel zum Einsatz des refreshable-Modifiers zeigt das nachfolgende Listing. Es zeigt eine Liste, die auf Werten aus einem values-Array basiert. Der refreshable(_:)-Modifier sorgt dafür, dass bei Ausführung einer Pull-to-Refresh-Geste dem Array ein neuer Wert hinzugefügt wird, der dann auch automatisch in der Liste erscheint.

struct ContentView: View {
    @State private var values = [0, 1, 2]
    
    var body: some View {
        List(values, id: \.self) { value in
            Text("\(value)")
        }
        .refreshable {
            values.append(values.count)
        }
    }
}

Sehr gelungen ist meiner Meinung nach die enorm simple Syntax, mit der sich dank des refreshable(_:)-Modifiers eine Pull-to-Refresh-Geste umsetzen lässt. Das zeigt ein ums andere Mal, wie gelungen, übersichtlich und verständlich sich SwiftUI-Syntax gestalten kann.

Der refreshable(_:)-Modifier steht ab Xcode 13 und damit auch in den kommenden neuen Versionen von iOS und Co. zur Verfügung.

Euer Thomas


Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert