An action that presents a window.
Use the ``EnvironmentValues/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 ``OpenWindowAction/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 `id` parameter,
as in the above example.
* A `value` parameter 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
<doc://com.apple.documentation/documentation/Foundation/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.
@MainActor @preconcurrency func callAsFunction<D>(id: String, value: D) where D : Decodable, D : Encodable, D : Hashable
Opens a window defined by the window group that presents the specified
value type and that's associated with the specified identifier.
Don't call this method directly. SwiftUI calls it when you
call the ``EnvironmentValues/openWindow`` action with an identifier
and a value:
openWindow(id: "message", value: message.id)
For information about how Swift uses the `callAsFunction()` method to
simplify call site syntax, see
[Methods with Special Names](https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID622)
in *The Swift Programming Language*.
- Parameters:
- id: The identifier of the scene to present.
- value: The value to present.
Opens a window that's associated with the specified identifier.
Don't call this method directly. SwiftUI calls it when you
call the ``EnvironmentValues/openWindow`` action with an identifier:
openWindow(id: "message")
For information about how Swift uses the `callAsFunction()` method to
simplify call site syntax, see
[Methods with Special Names](https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID622)
in *The Swift Programming Language*.
- Parameter id: The identifier of the scene to present.
method · iOS 16.0+
callAsFunction
TypeScript
callAsFunctionValue(value: number): Promise<void>
Swift declaration
@MainActor @preconcurrency func callAsFunction<D>(value: D) where D : Decodable, D : Encodable, D : Hashable
Opens a window defined by a window group that presents the type of
the specified value.
Don't call this method directly. SwiftUI calls it when you
call the ``EnvironmentValues/openWindow`` action with a value:
openWindow(value: message.id)
For information about how Swift uses the `callAsFunction()` method to
simplify call site syntax, see
[Methods with Special Names](https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID622)
in *The Swift Programming Language*.
- Parameter value: The value to present.