Swift-Beobachtungen von AsyncS... Notiz

Swift-Beobachtungen von AsyncSequence für Zustandsänderungen

Swift 6.2 führt einen neuen Typ namens Observations ein, um Zustandsänderungen von Observable-Typen zu streamen. Dies ist nützlich, um den Zustand von Anwendungen zu speichern, wie z. B. die Suchanfrage und den Navigationspfad einer Szene. Der Autor verwaltete diesen Zustand zuvor in einer Codable-Klasse namens SceneModel, die zur Speicherung in JSON kodiert werden konnte.Diese SceneModel wurde dann mithilfe von @SceneStorage in der Root-Ansicht gespeichert und wiederhergestellt. Das Speichern des Zustands beruhte jedoch auf der Überwachung der scenePhase, was unzuverlässig war, da Szenen beendet werden konnten, bevor sie in den Hintergrund wechselten. Vor Swift 6.2 ermöglichte ObservableObject mit @Published-Eigenschaften die Verwendung von Combine's buffer und values, um eine AsyncSequence zum Speichern von Zustandsänderungen zu erstellen.Mit iOS 26 und Swift 6.2 bietet der Observations-Typ eine ähnliche AsyncSequence für Observable-Typen. Dies ermöglicht die Beobachtung berechneter Eigenschaften, wie z. B. der JSON-Darstellung der SceneModel. Der Observations-Typ nimmt einen Closure entgegen, der den zu beobachtenden Wert zurückgibt.Änderungen sind transaktional, was bedeutet, dass mehrere synchrone Updates an beobachtbaren Eigenschaften zu einem einzigen Sequenzwert zusammengefasst werden. Die Nachverfolgung von Updates beginnt mit dem willSet von beobachtbaren Eigenschaften und endet am nächsten Aufhängepunkt. Dies ermöglicht das automatische Speichern des Zustands des Szenenmodells, wann immer es sich ändert, ohne auf die scenePhase angewiesen zu sein. Die AsyncSequence von Observations gibt den anfänglichen Wert der beobachteten Eigenschaft beim Abonnieren aus.