属性包装器
属性包装器(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
访问时,实际上是通过 MyPW
的 wrappedValue
属性进行读写操作。