<!--
{
  "availability" : [
    "iOS: -",
    "iPadOS: -",
    "visionOS: 1.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "RealityKit",
  "identifier" : "/documentation/RealityKit/Model3D/init(url:transaction:content:)",
  "metadataVersion" : "0.1.0",
  "role" : "Initializer",
  "symbol" : {
    "kind" : "Initializer",
    "modules" : [
      "RealityKit",
      "SwiftUI"
    ],
    "preciseIdentifier" : "s:19_RealityKit_SwiftUI7Model3DV3url11transaction7contentACyxG10Foundation3URLV_0cD011TransactionVxAA0E6DPhaseOctcfc"
  },
  "title" : "init(url:transaction:content:)"
}
-->

# init(url:transaction:content:)

Loads and displays a modifiable model from the specified URL in phases.

```
nonisolated init(url: URL, transaction: Transaction = Transaction(), @ViewBuilder content: @escaping (Model3DPhase) -> Content)
```

## Parameters

`url`

The URL of the image to display.

`transaction`

The transaction to use when the phase changes.

`content`

A closure that takes the load phase as an input, and
returns the view to display for the specified phase.

## Discussion

If you set the asynchronous model’s URL to `nil`, or after you set the
URL to a value but before the load operation completes, the phase is
[`Model3DPhase.empty`](/documentation/RealityKit/Model3DPhase/empty). After the operation completes, the phase
becomes either [`Model3DPhase.failure(_:)`](/documentation/RealityKit/Model3DPhase/failure(_:)) or
[`Model3DPhase.success(_:)`](/documentation/RealityKit/Model3DPhase/success(_:)). In the first case, the phase’s
[`error`](/documentation/RealityKit/Model3DPhase/error) value indicates the reason for failure.
In the second case, the phase’s [`model`](/documentation/RealityKit/Model3DPhase/model) property
contains the loaded model. Use the phase to drive the output of the
`content` closure, which defines the view’s appearance:

```swift
let url = URL(string: "https://example.com/robot.usdz")!
Model3D(url: url) { phase in
    if let model = phase.model {
        model // Displays the loaded model.
    } else if phase.error != nil {
        Color.red // Indicates an error.
    } else {
        Color.blue // Acts as a placeholder.
    }
}
```

To add transitions when you change the URL, apply an identifier to the
[`Model3D`](/documentation/RealityKit/Model3D).

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)