Entry point
Starting a program and mounting it as a SwiftUI app.
Contents
How a Program becomes Swift, in parts. Start with the introduction, then follow each part into the rendered output and the runtime it links against.
- Introduction — what the Swift target is, and how to read the rest of this section.
- Capabilities — which high-level features are possible, built in or through a library.
- Example — a full program using every keyword, and the Swift it renders to.
- Naming considerations — how Program's dotted names are carried into Swift.
- Entry point — starting a program and mounting it as a SwiftUI app.
- Drivers — the native drivers that provide the interface, animation and network.
- Runtime — the Reactive and Context machinery the rendered code links against.
- Native modules — the hand-written Swift behind
NATIVEfunctions. - Keywords — how each of Program's keywords renders to Swift.
- Project setup — the files and commands to build and run the rendered program.
- Reserved words — the words Swift keeps for itself, and how a colliding name is escaped.
One call, mounted in a scene
A program starts with a single call that takes the root component and the
drivers it uses. On Swift the result is a SwiftUI
View, so it is placed in the app's WindowGroup — the running
program is the root view.
@main
struct CounterApp: App {
var body: some Scene {
WindowGroup {
Program.Application({ Counter() }, [ Ui.SwiftUI.Driver() ])
}
}
}
The root component is the run body: its calls emit the interface, its state lives across cycles, and its nesting becomes nested trailing closures (see the example). SwiftUI owns the lifecycle. The model is exactly the JavaScript entry point; only the mount differs.