---
title: PreviewModifier
framework: swiftui
role: symbol
role_heading: Protocol
path: swiftui/previewmodifier
---

# PreviewModifier

A type that defines an environment in which previews can appear.

## Declaration

```swift
@MainActor protocol PreviewModifier
```

## Overview

Overview Conforming types can define shared contexts that will be cached by the preview system, then reused across participating previews. For example, you might create a model container here and populate it with sample data; in your body method you would then apply it to the preview using the .modelContainer view modifier. struct SampleData: PreviewModifier {     static func makeSharedContext() throws -> ModelContainer {         let container = try ModelContainer(for: Snack.self)         container.mainContext.insert(Snack.potatoChips)         return container     }

func body(content: Content, context: ModelContainer) -> some View {         content.modelContainer(context)     }  } Use the .modifier preview trait to attach modifiers to a preview. #Preview(traits: .modifier(SampleData())) {     @Previewable @Query var snacks: [Snack]     return SnackView(snack: snacks.first!) }

## Topics

### Associated Types

- [Body](swiftui/previewmodifier/body.md)
- [Context](swiftui/previewmodifier/context.md)

### Instance Methods

- [body(content:context:)](swiftui/previewmodifier/body(content:context:).md)

### Type Aliases

- [PreviewModifier.Content](swiftui/previewmodifier/content.md)

### Type Methods

- [makeSharedContext()](swiftui/previewmodifier/makesharedcontext().md)

## See Also

### Defining a preview

- [Previewable()](swiftui/previewable().md)
- [PreviewProvider](swiftui/previewprovider.md)
- [PreviewPlatform](swiftui/previewplatform.md)
- [previewDisplayName(_:)](swiftui/view/previewdisplayname(_:).md)
- [PreviewModifierContent](swiftui/previewmodifiercontent.md)
