DEV Community

David Goyes
David Goyes

Posted on

Swift #26: Property Wrapper

Para más información, leer la documentación.

Un "property wrapper" permite encapsular un comportamiento en una propiedad. Por definición, es una estructura precedida por la palabra clave @propertyWrapper que incluye un atributo computado con el nombre wrappedValue para procesar y almacenar el valor de la propiedad. La estructura debe incluir un inicializador para el atributo wrappedValue.

@propertyWrapper
struct ValorLimitado {
  private var storedValue: Int = 0

  var wrappedValue: Int {
    get {
      storedValue
    }
    set {
      if newValue > 128 {
        storedValue = 128
      } else if newValue < 0 {
        storedValue = 0
      } else {
        storedValue = newValue
      }
    }
  }

  init(wrappedValue: Int) {
    self.wrappedValue = wrappedValue
  }
}
Enter fullscreen mode Exit fullscreen mode

Luego, se puede usar el comportamiento definido en el property wrapper, declarando las propiedades precedidas con el nombre del property wrapper, que debe tener el caracter @ como prefijo.

struct Client {
  @ValorLimitado var myValue: Int = 0
  mutating func incrementar() {
    myValue += 999
    print(myValue) // 128
  }
}
var x = Client()
x.incrementar()
Enter fullscreen mode Exit fullscreen mode

Top comments (0)