---
title: Spring
framework: swiftui
role: symbol
role_heading: Structure
path: swiftui/spring
---

# Spring

A representation of a spring’s motion.

## Declaration

```swift
struct Spring
```

## Overview

Overview Use this type to convert between different representations of spring parameters: let spring = Spring(duration: 0.5, bounce: 0.3) let (mass, stiffness, damping) = (spring.mass, spring.stiffness, spring.damping) // (1.0, 157.9, 17.6)

let spring2 = Spring(mass: 1, stiffness: 100, damping: 10) let (duration, bounce) = (spring2.duration, spring2.bounce) // (0.63, 0.5) You can also use it to query for a spring’s position and its other properties for a given set of inputs: func unitPosition(time: TimeInterval) -> Double {     let spring = Spring(duration: 0.5, bounce: 0.3)     return spring.position(target: 1.0, time: time) }

## Topics

### Creating a spring

- [init(duration:bounce:)](swiftui/spring/init(duration:bounce:).md)
- [init(mass:stiffness:damping:allowOverDamping:)](swiftui/spring/init(mass:stiffness:damping:allowoverdamping:).md)
- [init(response:dampingRatio:)](swiftui/spring/init(response:dampingratio:).md)
- [init(settlingDuration:dampingRatio:epsilon:)](swiftui/spring/init(settlingduration:dampingratio:epsilon:).md)

### Getting built-in springs

- [bouncy](swiftui/spring/bouncy.md)
- [bouncy(duration:extraBounce:)](swiftui/spring/bouncy(duration:extrabounce:).md)
- [smooth](swiftui/spring/smooth.md)
- [smooth(duration:extraBounce:)](swiftui/spring/smooth(duration:extrabounce:).md)
- [snappy](swiftui/spring/snappy.md)
- [snappy(duration:extraBounce:)](swiftui/spring/snappy(duration:extrabounce:).md)

### Getting spring characteristics

- [bounce](swiftui/spring/bounce.md)
- [damping](swiftui/spring/damping.md)
- [dampingRatio](swiftui/spring/dampingratio.md)
- [duration](swiftui/spring/duration.md)
- [mass](swiftui/spring/mass.md)
- [response](swiftui/spring/response.md)
- [settlingDuration](swiftui/spring/settlingduration.md)
- [stiffness](swiftui/spring/stiffness.md)

### Getting spring state

- [value(target:initialVelocity:time:)](swiftui/spring/value(target:initialvelocity:time:).md)
- [value(fromValue:toValue:initialVelocity:time:)](swiftui/spring/value(fromvalue:tovalue:initialvelocity:time:).md)
- [velocity(target:initialVelocity:time:)](swiftui/spring/velocity(target:initialvelocity:time:).md)
- [velocity(fromValue:toValue:initialVelocity:time:)](swiftui/spring/velocity(fromvalue:tovalue:initialvelocity:time:).md)

### Setting spring state

- [update(value:velocity:target:deltaTime:)](swiftui/spring/update(value:velocity:target:deltatime:).md)

### Calculating forces and durations

- [force(target:position:velocity:)](swiftui/spring/force(target:position:velocity:).md)
- [force(fromValue:toValue:position:velocity:)](swiftui/spring/force(fromvalue:tovalue:position:velocity:).md)
- [settlingDuration(target:initialVelocity:epsilon:)](swiftui/spring/settlingduration(target:initialvelocity:epsilon:).md)
- [settlingDuration(fromValue:toValue:initialVelocity:epsilon:)](swiftui/spring/settlingduration(fromvalue:tovalue:initialvelocity:epsilon:).md)

## Relationships

### Conforms To

- [Equatable](swift/equatable.md)
- [Hashable](swift/hashable.md)
- [Sendable](swift/sendable.md)
- [SendableMetatype](swift/sendablemetatype.md)

## See Also

### Creating custom animations

- [CustomAnimation](swiftui/customanimation.md)
- [AnimationContext](swiftui/animationcontext.md)
- [AnimationState](swiftui/animationstate.md)
- [AnimationStateKey](swiftui/animationstatekey.md)
- [UnitCurve](swiftui/unitcurve.md)
