属性包装器
属性包装器在管理属性如何存储和定义属性的代码之间添加了一个分隔层。
属性包装器只能应用于变量
定义属性包装器
需要使用@PropertyWrapper
定义一个包装器
使用属性包装器
在定义属性时,使用属性包装器
TwelveOrLess
定义了一个包装器,包装器中number
用于保存属性的值(定义成private,阻止其他类访问)。
wrappedvalue
计算属性用于对number
的读写,同时在读写时添加额外的操作。
@TwelveOrLess
修饰需要包装器的属性,对于属性的读写就是对TwelveOrLess
中wrappedvalues
的读写。
设置被包装属性的初始值
被包装属性在初始化时,会调用包装器的构造器。如果需要为包装器提供更复杂的操作,则需要添加更多的构造器。
如果没有为被包装属性提供初始值,则会调用包装器的默认构造器。
当为被包装属性提供初始值,但是需要在定义包装器时添加一个构造器。
3. 注意点
被包装后的属性事实上已经不是原本的类型了,而是一个包装器结构体类型的属性
属性包装器本身就是一个结构体,需要定义一个
wrappedValue
属性(对于被包装属性的读写就是对wrappedValue
属性的读写)。被包装属性的初始化将会调用属性包装器的构造器。
属性包装器只能应用于变量
属性包装器是一个语法糖,被属性包装器修饰的属性实际上类型是属性包装器的结构体类型;对被包装属性的读写就转换为对包装器实例中
wrappedValue
属性的读写;而在包装器的结构体中,可以提供更多复杂的逻辑。
最后更新于