小编典典

swift willSet didSet并在属性中获取set方法

swift

在属性内处理此时willSet- didSetget- 之间有什么区别set

从我的角度来看,它们两者都可以为属性设置值。什么时候,为什么,我应该使用willSet- didSet,什么时候get- set

我知道for willSetdidSet的结构如下:

var variable1 : Int = 0 {
    didSet {
        println (variable1)
    }
    willSet(newValue) {
    ..
    }
}

var variable2: Int {
    get {
        return variable2
    }
    set (newValue){
    }
}

阅读 366

收藏
2020-07-07

共1个答案

小编典典

什么时候以及为什么要使用willSet / didSet

  • willSet在值存储 之前 被调用。
  • didSet新值存储 立即调用。

考虑带有输出的示例:


var variable1 : Int = 0 {
        didSet{
            print("didSet called")
        }
        willSet(newValue){
            print("willSet called")
        }
    }

    print("we are going to add 3")

     variable1 = 3

    print("we added 3")

输出:

we are going to add 3
willSet called
didSet called
we added 3

它像前/后条件一样工作

另一方面,get如果要添加例如只读属性,则可以使用:

var value : Int {
 get {
    return 34
 }
}

print(value)

value = 2 // error: cannot assign to a get-only property 'value'
2020-07-07