美文网首页
属性包装器

属性包装器

作者: 大写的空气 | 来源:发表于2021-06-08 15:13 被阅读0次
定义

管理属性如何存储和定义属性的代码之间添加一个分隔层,需存在一个wrappedValue属性的结构体,在结构体顶部使用@propertyWrapper修饰

//定义包装器,确保number值小于12
@propertyWrapper
struct TwelveOrLess {
    private var number = 0
    private var maximum: Int
    private var minimum: Int = 0
    var projectedValue: SmallNumber{ self }  //属性定义,必须为projectedValue  模拟alamofire中protected举例
    var wrappedValue: Int {
        get { return number }
        set { number = min(newValue, 12) }
    }
//当需要给属性包装器设置初值时,构造器会被调用
    init(wrappedValue: Int) {
        maximum = 12
        number = min(wrappedValue, maximum)
    }
  //此属性包装器支持调用时赋初值不考虑wrappedValue参数
    init(wrappedValue: Int, maximum: Int) {
        self.maximum = maximum
        number = min(wrappedValue, maximum)
    }
    init(minimum: Int, maximum: Int) {
        self.maximum = min(maximum, 12)
        self.minimum = min(minimum, 12)
        self.number = min(minimum, 12)
    }
    func method1() -> Void {
        
    }
}
//在struct中使用包装器
struct SmallRectangle {
    @TwelveOrLess var height: Int
    @TwelveOrLess var width: Int = 1 //调用上面包装器中init(wrappedValue: Int)构造方法
    @TwelveOrLess(minimum: 2, maximum: 5) var reset: Int //调用上面包装器中 init(minimum: Int, maximum: Int)构造方法
    @TwelveOrLess(maximum: 5) var reset: Int //调用上面包装器中 init(wrappedValue: Int, maximum: Int)构造方法
}

var rectangle = SmallRectangle()
print(rectangle.height)
// 打印 "0"
rectangle.height = 10
print(rectangle.height)
// 打印 "10"
rectangle.height = 24
print(rectangle.height)
// 打印 "12"
$height.method1()  //$height将会取到包装器中定义的projectedValue

属性包装器,一定要定义为属性哟!

相关文章

  • SwiftUI 属性包装器(property wrappers)

    包装属性包装器(Wrapping up property wrappers) 使用属性包装器(property w...

  • swift属性包装器 propertyWrapper

    swift属性包装器 propertyWrapper 什么是属性包装器「propertyWrapper」? 在类、...

  • 属性包装器

    属性包装器

  • 属性包装器

    定义 管理属性如何存储和定义属性的代码之间添加一个分隔层,需存在一个wrappedValue属性的结构体,在结构体...

  • swift 属性专题

    计算属性 简写设置器 在swift中setter/getter方法的实现 属性观察者 属性包装 属性包装映射值

  • Swift中的 @property Wrapper

    属性包装器 属性包装器在管理属性如何存储和定义属性的代码之间添加了一个分隔层。举例来说,如果你的属性需要线程安全性...

  • Swift5.2 拾遗笔记(一)

    本文为私人学习笔记,仅仅做为记录使用,详情内容请查阅 中文官方文档。 属性 属性包装器 属性包装器在管理如何存储和...

  • SwiftUI:创建自定义绑定

    由于SwiftUI将绑定更新发送到属性包装器的方式,分配与属性包装器一起使用的属性观察器将无法正常工作,这意味着即...

  • Swift 属性包装器

    示例代码下载[https://github.com/jiuchabaikaishui/SwiftPropertyW...

  • SwiftUI属性包装器

    一、@State二、@State和@Binding三、@StateObject和@Published四、@Envi...

网友评论

      本文标题:属性包装器

      本文链接:https://www.haomeiwen.com/subject/gzhxeltx.html