How do I support multi-window scenes in Combine with Swift?

To support multi-window scenes in a Swift app using Combine, you can create multiple instances of a SwiftUI view, each associated with its own scene. This allows for better data management across different windows while leveraging the Combine framework for reactive programming. Here's how you can do it:


import SwiftUI
import Combine

struct ContentView: View {
    @Environment(\.scenePhase) private var scenePhase
    @State private var counter = 0
    private var cancellables = Set()

    var body: some View {
        VStack {
            Text("Window Count: \(counter)")
            Button("Open New Window") {
                self.openNewWindow()
            }
        }
        .onChange(of: scenePhase) { newPhase in
            if newPhase == .active {
                self.counter += 1
            }
        }
    }

    private func openNewWindow() {
        let newWindow = NSApplication.shared.windows.count + 1
        let newContentView = ContentView()
        // Code to create a new window containing newContentView
    }
}
    

Swift Combine multi-window SwiftUI reactive programming