---
title: ViewModifier
framework: swiftui
role: symbol
role_heading: Protocol
path: swiftui/viewmodifier
---

# ViewModifier

A modifier that you apply to a view or another view modifier, producing a different version of the original value.

## Declaration

```swift
@MainActor @preconcurrency protocol ViewModifier
```

## Mentioned in

Reducing view modifier maintenance

## Overview

Overview Adopt the ViewModifier protocol when you want to create a reusable modifier that you can apply to any view. The example below combines several modifiers to create a new modifier that you can use to create blue caption text surrounded by a rounded rectangle: struct BorderedCaption: ViewModifier {     func body(content: Content) -> some View {         content             .font(.caption2)             .padding(10)             .overlay(                 RoundedRectangle(cornerRadius: 15)                     .stroke(lineWidth: 1)             )             .foregroundColor(Color.blue)     } } You can apply modifier(_:) directly to a view, but a more common and idiomatic approach uses modifier(_:) to define an extension to View itself that incorporates the view modifier: extension View {     func borderedCaption() -> some View {         modifier(BorderedCaption())     } } You can then apply the bordered caption to any view, similar to this: Image(systemName: "bus")     .resizable()     .frame(width:50, height:50) Text("Downtown Bus")     .borderedCaption()

A type conforming to this protocol inherits @preconcurrency @MainActor isolation from the protocol if the conformance is included in the type’s base declaration: struct MyCustomType: Transition {     // `@preconcurrency @MainActor` isolation by default } Isolation to the main actor is the default, but it’s not required. Declare the conformance in an extension to opt out of main actor isolation: extension MyCustomType: Transition {     // `nonisolated` by default }

## Topics

### Creating a view modifier

- [body(content:)](swiftui/viewmodifier/body(content:).md)
- [Body](swiftui/viewmodifier/body.md)
- [ViewModifier.Content](swiftui/viewmodifier/content.md)

### Adding animations to a view

- [animation(_:)](swiftui/viewmodifier/animation(_:).md)
- [concat(_:)](swiftui/viewmodifier/concat(_:).md)

### Handling view taps and gestures

- [transaction(_:)](swiftui/viewmodifier/transaction(_:).md)

## Relationships

### Inherited By

- [AnimatableModifier](swiftui/animatablemodifier.md)
- [EnvironmentalModifier](swiftui/environmentalmodifier.md)
- [GeometryEffect](swiftui/geometryeffect.md)

### Conforming Types

- [AccessibilityAttachmentModifier](swiftui/accessibilityattachmentmodifier.md)
- [EmptyModifier](swiftui/emptymodifier.md)
- [LayoutRotationUnaryLayout](swiftui/layoutrotationunarylayout.md)
- [ManipulableModifier](swiftui/manipulablemodifier.md)
- [ManipulableResponderModifier](swiftui/manipulablerespondermodifier.md)
- [ManipulableTransformBindingModifier](swiftui/manipulabletransformbindingmodifier.md)
- [ManipulationGeometryModifier](swiftui/manipulationgeometrymodifier.md)
- [ManipulationGestureModifier](swiftui/manipulationgesturemodifier.md)
- [ManipulationUsingGestureStateModifier](swiftui/manipulationusinggesturestatemodifier.md)
- [ModifiedContent](swiftui/modifiedcontent.md)

## See Also

### Modifying a view

- [Configuring views](swiftui/configuring-views.md)
- [Reducing view modifier maintenance](swiftui/reducing-view-modifier-maintenance.md)
- [modifier(_:)](swiftui/view/modifier(_:).md)
- [EmptyModifier](swiftui/emptymodifier.md)
- [ModifiedContent](swiftui/modifiedcontent.md)
- [EnvironmentalModifier](swiftui/environmentalmodifier.md)
- [ManipulableModifier](swiftui/manipulablemodifier.md)
- [ManipulableResponderModifier](swiftui/manipulablerespondermodifier.md)
- [ManipulableTransformBindingModifier](swiftui/manipulabletransformbindingmodifier.md)
- [ManipulationGeometryModifier](swiftui/manipulationgeometrymodifier.md)
- [ManipulationGestureModifier](swiftui/manipulationgesturemodifier.md)
- [ManipulationUsingGestureStateModifier](swiftui/manipulationusinggesturestatemodifier.md)
- [Manipulable](swiftui/manipulable.md)
