Simplify your code with @Entry
The Swift macro to reduce boilerplate
If you’ve ever tried to tap into the systems provided by SwiftUI, you are very likely to have come across code like this:
struct MyEnvironmentKey: EnvironmentKey {
static let defaultValue: Int? = nil
}
extension EnvironmentValues {
var myEnvironmentValue: Int? {
get { self[MyEnvironmentKey.self] }
set { self[MyEnvironmentKey.self] = newValue }
}
}
This code may seem all right, but if you ever had to add multiple values to the environment, you quickly realised how fast you can fill your codebase with a lot of boilerplate code. Let’s see how to simplify this!
@Entry to the rescue
Starting with iOS 13, we can replace the code above with 3 simple lines.
extension EnvironmentValues {
@Entry var myEnvironmentValue: Int? = nil
}
After creating an extension for EnvironmentValues
you can declare your property as if it was a regular stored property, except it has to be annotated with the @Entry
macro. Under the hood this macro generates the necessary code but your codebase is a lot simple.
What else can it do?
The @Entry
macro can be used to extend not only the Environment, but also transaction values, container values and focused values
Related articles
Here are some more articles that may interest you. Check them out!
WWDC25 Recap
published on June 9, 2025
WWDCiOSmacOSAs usual, Apple kicked off the 2025 Worldwide Developers Conference with a quick presentation highlighting the upcoming updates across its platforms. This article recaps the new features announced this year, including the striking new Liquid Glass design and the introduction of Apple Intelligence.
Read moreCustom Regex Components in Swift
published on April 13, 2025
SwiftIn a previous article we have looked at how powerful the Swift regex system is. In this article we are going to look at another clever way for working with complex regular expressions, the RegexComponent.
Read moreRegular expressions in Swift
published on February 27, 2025
SwiftSwift 5.7 transforms the regex experience from a developer's nightmare into an elegant solution, introducing compile-time validation and a SwiftUI-like DSL that makes even complex pattern matching readable, type-safe, and dramatically more approachable.
Read more