Textfelder und die Quelle der Wahrheit


Viele Bibliotheken für grafische Oberfläche haben ein konzeptionelles Problem. Wird ein Wert in ein Steuerelement, beispielsweise ein Textfeld eingegeben, unterscheidet sich dieser Wert während der Eingabe von der Variablen, die diesen Wert verwalten sollte. Wenn dies der Fall ist kommen Mechanismen zum Einsatz, um den angezeigten Wert und Variablenwert zu synchronisieren. Soll der Wert angezeigt werden, muss er von der Variablen auf die grafische Oberfläche übertragen werden. Bei einer Eingabe ist der Weg andersherum. Von der grafischen Oberfläche in die Variable.

Beim Entwurf von SwiftUI Haben die Entwickler entschieden, dieses Problem nicht zu wiederholen. In SwiftUI wird an vielen Situationen eine Variable direkt mit einem Steuerelement verbunden. Das Steuerelement repräsentiert den Variablenwert und während einer Eingabe werden die Änderungen sofort in die Variable übertragen. Der aktuelle Wert ist immer in der Variablen zu finden und unterscheidet sich nicht von dem Inhalt, der auf der grafischen Oberfläche angezeigt wird. Dieses Konzept wird als »Einzige Quelle der Wahrheit« oder »Single Source of Truth« bezeichnet. Für den Entwickler entfällt die Überlegung, wo der aktuelle Wert zu finden ist. Variablenwert und angezeigter Wert in der grafischen Oberfläche sind immer identisch. Der folgende Code ist für das beschriebene Verhalten ein Beispiel. Gezeigt wird eine typischer SwiftUI View, in dem die Variable value vom Typ String definiert ist. Weil es sich um eine Variable handelt, die in einer SwiftUI-View deklariert ist muss sie zusammen mit dem Property Wrapper @State verwendet werden. SwiftUI verwaltet dann Variable. Wird der Wert geändert, aktualisiert SwiftUI automatisch die Teile der Ansicht, die von dem Wert abhängen.

Zum Einsatz kommt value in einem Steuerelement von Typ TextField. Dies ist ein Steuerelement, das sowohl die Anzeige des Textes und die Eingabe ermöglicht. Im Beispiel wird das Element mit zwei Parametern erzeugt. Der erste Parameter ist ein Platzhaltertext, der automatisch immer dann angezeigt wird, wenn der Variablenwert leer ist. Wird kein Platzhalter benötigt, darf die dort verwendete Zeichenkette leer sein. Der zweite Parameter ist der Text. Beachtenswert ist dabei das Dollar-Zeichen vor dem Namen der Variable. Es definiert eine Bindung, »Binding« in englischen Dokumentationen. Der Variablenwert wird nicht etwa in das Steuerelement kopiert, sondern direkt mit der Variablen verbunden. Eingaben in das Steuerelement werden automatisch in die Variable übertragen. Leicht zu demonstrieren, ist dies mit dem zweiten Steuerelement vom Typ Text. Dieses Element kann einen Text nur anzeigen. Eingaben sind dort nicht durchführbar. Aus diesem Grund ist keine Bindung, die Verwendung des Variablennamens mit dem $, notwendig. Veränderungen dort erfolgen immer nur von der Variablen zum Steuerelement, aber nicht in die andere Richtung. Das Element wird bei Änderung des Variablenwertes aktualisiert. Im Beispiel immer dann, wenn eine Veränderung durch eine Eingabe in dem TextField erfolgt. Die »Quelle der Wahrheit« ist für beide Steuerelemente die Variable value. Dort, und nur dort, ist die Eingabe in das Textfield-Element zu finden. Es direkter Zugriff auf das Steuerelement ist nicht erforderlich.

import SwiftUI

struct ContentView: View {
    
    @State private var value : String = ""
    
    var body: some View {
       
        VStack(alignment: .leading)  {
            
            TextField("Placeholder Text", text: $value)
                .padding(15)
                            
            Text(value)
                .padding(15)
        }
    }
}
Stacks Image 97

Veröffentlicht am: 01.01.2025


© 2025 Holger Hinzberg Contact