OpenWindowAction
An action that presents a window.
Declaration
@MainActor @preconcurrency struct OpenWindowActionOverview
Use the openWindow environment value to get the instance of this structure for a given Environment. Then call the instance to open a window. You call the instance directly because it defines a callAsFunction(id:) method that Swift calls when you call the instance.
For example, you can define a button that opens a new mail viewer window:
@main
struct Mail: App {
var body: some Scene {
WindowGroup(id: "mail-viewer") {
MailViewer()
}
}
}
struct NewViewerButton: View {
@Environment(\.openWindow) private var openWindow
var body: some View {
Button("Open new mail viewer") {
openWindow(id: "mail-viewer")
}
}
}You indicate which scene to open by providing one of the following:
A string identifier that you pass through the
idparameter, as in the above example.A
valueparameter that has a type that matches the type that you specify in the scene’s initializer.Both an identifier and a value. This enables you to define multiple window groups that take input values of the same type, like a UUID.
Use the first option to target either a WindowGroup or a Window scene in your app that has a matching identifier. For a WindowGroup, the system creates a new window for the group. If the window group presents data, the system provides the default value or nil to the window’s root view. If the targeted scene is a Window, the system orders it to the front.
Use the other two options to target a WindowGroup and provide a value to present. If the interface already has a window from the group that’s presenting the specified value, the system brings the window to the front. Otherwise, the system creates a new window and passes a binding to the specified value.