---
title: EnvironmentKey
framework: swiftui
role: symbol
role_heading: Protocol
path: swiftui/environmentkey
---

# EnvironmentKey

A key for accessing values in the environment.

## Declaration

```swift
protocol EnvironmentKey
```

## Overview

Overview You can create custom environment values by extending the EnvironmentValues structure with new properties. First declare a new environment key type and specify a value for the required defaultValue property: private struct MyEnvironmentKey: EnvironmentKey {     static let defaultValue: String = "Default value" } The Swift compiler automatically infers the associated Value type as the type you specify for the default value. Then use the key to define a new environment value property: extension EnvironmentValues {     var myCustomValue: String {         get { self[MyEnvironmentKey.self] }         set { self[MyEnvironmentKey.self] = newValue }     } } Clients of your environment value never use the key directly. Instead, they use the key path of your custom environment value property. To set the environment value for a view and all its subviews, add the environment(_:_:) view modifier to that view: MyView()     .environment(\.myCustomValue, "Another string") As a convenience, you can also define a dedicated view modifier to apply this environment value: extension View {     func myCustomValue(_ myCustomValue: String) -> some View {         environment(\.myCustomValue, myCustomValue)     } } This improves clarity at the call site: MyView()     .myCustomValue("Another string") To read the value from inside MyView or one of its descendants, use the Environment property wrapper: struct MyView: View {     @Environment(\.myCustomValue) var customValue: String

var body: some View {         Text(customValue) // Displays "Another string".     } }

## Topics

### Getting the default value

- [defaultValue](swiftui/environmentkey/defaultvalue.md)
- [Value](swiftui/environmentkey/value.md)

## See Also

### Creating custom environment values

- [Entry()](swiftui/entry().md)
