# Swift: A Custom Property Wrapper For Disabling Views' Auto Resizing Mask Into Constraints

Have you ever spent hours investigating your code to see why your UI implementation is crashing because you forgot to disable `translatesAutoresizingMaskIntoConstraints`? Well, because I did, and I know how depressed and hurtful it feels.

In this article, I will introduce you to a custom property wrapper which can save you so much time in the future. Because you no longer need to disable views' auto-resizing ask manually.

But first, know what a property wrapper in Swift is:
> A property wrapper adds a layer of separation between the code that manages how a property is stored and the code that defines a property.


Now, time to show off the custom property wrapper.

Create a new Swift file. Feel free to name it anything, but for the article I name it `AutoLayoutUsage`, the same as the property wrapper's name.

```
import class UIKit.UIView

@propertyWrapper
public struct AutoLayoutUsage<T: UIView> {
    public var wrappedValue: T {
        didSet {
            setTranslatesAutoresizingMaskIntoConstraints()
        }
    }

    public init(wrappedValue: T) {
        self.wrappedValue = wrappedValue
        setTranslatesAutoresizingMaskIntoConstraints()
    }

    private func setTranslatesAutoresizingMaskIntoConstraints() {
        wrappedValue.translatesAutoresizingMaskIntoConstraints = false
    }
}
``` 

You may wonder if I only imported the `UIView` class only from `UIKit`. It's because I want to reduce the API surface of the file. You're welcome.

Here is a usage example of the property wrapper for the view components:


```
import UIKit

final class SomeView: UIView {
    // ...

    @AutoLayoutUsage var button = UIButton()

    // ...
}
``` 

All you need is to write down `@AutoLayoutUsage` before declaring component variables. You are no longer required to write `$0.translatesAutoresizingMaskIntoConstraints = false` manually!

Please don't forget that you *must* create variables for your components rather than constants because property wrappers only support variables.

That was it! I hope it saves you from seeing your views crash before getting initialised.
