©️ OverlookArt
首页 / Swift / 属性包装器

属性包装器

属性包装器(Property Wrapper)是 Swift 5.1 引入的一种语法特性,允许开发者通过自定义类型来封装属性的 getter、setter、存储和其他行为逻辑。属性包装器可以帮助实现属性的复用逻辑、统一校验、懒加载、持久化等场景。

实现

使用 @propertyWrapper 关键字定义一个属性包装器类型。属性包装器类型必须包含一个名为 wrappedValue 的属性,该属性定义了被包装属性的实际值。

1@propertyWrapper
2struct MyPW {
3    private var value: Int
4    var wrappedValue: Int {
5        get { value }
6        set { value = newValue }
7    }
8}

使用

使用属性包装器时,在属性声明前加上 @ 符号和属性包装器类型的名称。

1public struct Foo {
2    @MyPW var bar: Int
3}
4
5func test() {
6    var a = Foo()
7    a.bar = 20
8    debugPrint(a.bar)
9}

在上面的示例中,bar 属性被 MyPW 属性包装器所包装。通过 a.bar 访问时,实际上是通过 MyPWwrappedValue 属性进行读写操作。