RSS Use Your Loaf - iOS 開発ニュース & ヒント フォロー SwiftのAsyncSequenceによる状態変化の観測 Swift 6.2 では、Observable 型からの状態変更をストリームするための新しい Observations 型が導入されました。これは、シーンの検索クエリやナビゲーションパスのようなアプリケーションの状態を永続化するのに役立ちます。著者は以前、この状態を Codable クラスである SceneModel で管理していました。このクラスは、永続化のために JSON にエンコードすることができました。この SceneModel は、ルートビューの @SceneStorage を使用して保存および復元されていました。しかし、状態の保存は scenePhase を監視することに依存していましたが、シーンがバックグラウンドに入る前に終了する可能性があるため、これは信頼性が低いものでした。Swift 6.2 より前は、@Published プロパティを持つ ObservableObject により、Combine の buffer と values を使用して AsyncSequence を作成し、状態変更を保存することができました。iOS 26 と Swift 6.2 では、Observations 型が Observable 型に対して同様の AsyncSequence を提供します。これにより、SceneModel の JSON 表現のような計算プロパティを監視できます。Observations 型は、監視する値を返すクロージャを受け取ります。変更はトランザクショナルであり、観測可能なプロパティに対する複数の同期更新は、単一のシーケンス値にバッチ処理されます。更新の追跡は、観測可能なプロパティの willSet から開始され、次のサスペンションポイントで終了します。これにより、scenePhase に依存することなく、シーンモデルの状態が変更されるたびに自動的に保存できるようになります。Observations からの AsyncSequence は、サブスクライブ時に観測されたプロパティの初期値を発行します。 Swift Observations AsyncSequence for State Changes useyourloaf.com
Observable型からの状態変更をストリームするための新しいObservations型が導入されました。これは、シーンの検索クエリやナビゲーションパスのようなアプリケーションの状態を永続化するのに役立ちます。著者は以前、この状態をCodableクラスであるSceneModelで管理していました。このクラスは、永続化のために JSON にエンコードすることができました。このSceneModelは、ルートビューの@SceneStorageを使用して保存および復元されていました。しかし、状態の保存はscenePhaseを監視することに依存していましたが、シーンがバックグラウンドに入る前に終了する可能性があるため、これは信頼性が低いものでした。Swift 6.2 より前は、@Publishedプロパティを持つObservableObjectにより、Combine のbufferとvaluesを使用してAsyncSequenceを作成し、状態変更を保存することができました。iOS 26 と Swift 6.2 では、Observations型がObservable型に対して同様のAsyncSequenceを提供します。これにより、SceneModelの JSON 表現のような計算プロパティを監視できます。Observations型は、監視する値を返すクロージャを受け取ります。変更はトランザクショナルであり、観測可能なプロパティに対する複数の同期更新は、単一のシーケンス値にバッチ処理されます。更新の追跡は、観測可能なプロパティのwillSetから開始され、次のサスペンションポイントで終了します。これにより、scenePhaseに依存することなく、シーンモデルの状態が変更されるたびに自動的に保存できるようになります。ObservationsからのAsyncSequenceは、サブスクライブ時に観測されたプロパティの初期値を発行します。