Enhancing Swift Code with Property Wrappers

A portrait painting style image of a pirate holding an iPhone.

by The Captain

April 17, 2024

Working with Property Wrappers in Swift

Property wrappers are a powerful Swift feature that provides a convenient way to define custom behavior for property access. They allow you to encapsulate the logic for storing and retrieving property values in a separate type, making your code more concise and readable.

One common use case for property wrappers is to add validation or transformation logic to property access. Let's take a look at an example of a property wrapper that ensures a string property is always capitalized:

struct Capitalized {
    private var value: String = ""

    var wrappedValue: String {
        get { return value }
        set { value = newValue.capitalized }

    init(initialValue: String) {
        self.value = initialValue.capitalized

struct User {
    @Capitalized var firstName: String
    @Capitalized var lastName: String

var user = User(firstName: "john", lastName: "doe")
print(user.firstName) // Output: John
print(user.lastName) // Output: Doe}

In this example, the `@Capitalized` property wrapper ensures that the `firstName` and `lastName` properties of the `User` struct are always capitalized. The `wrappedValue` property handles the logic for capitalizing the input value, ensuring consistency in the capitalized format.

Benefits of Property Wrappers

Property wrappers provide several benefits, such as:

  • Encapsulating property behavior: Property wrappers allow you to encapsulate complex logic for property access within a separate type, improving code maintainability and readability.
  • Reusability: Property wrappers can be applied to multiple properties across different types, promoting code reuse and reducing duplication.
  • Declarative syntax: By using property wrappers, you can declare custom behavior for properties in a concise and declarative manner, enhancing the clarity of your code.

Overall, property wrappers are a valuable tool in Swift for enhancing the functionality and readability of your code, particularly when working with custom property behavior.