加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – set和didSet之间的根本区别是什么?

发布时间:2020-12-14 05:25:48 所属栏目:百科 来源:网络整理
导读:我知道一个人是一个二传手,另一个是财产观察者.我的问题是他们的行为有何不同,你何时会使用另一个.他们不是做同样的事情吗?例如: var foo: String { set { run code when set }}var foo: String { didSet { run code when set }} 他们并没有做同样的事情,
我知道一个人是一个二传手,另一个是财产观察者.我的问题是他们的行为有何不同,你何时会使用另一个.他们不是做同样的事情吗?例如:
var foo: String {
 set {
   run code when set
 }
}

var foo: String {
 didSet {
  run code when set
 }
}
他们并没有做同样的事情,相反他们有完全不同的目的. get和setare用于计算属性.例如,采用这个没有实际用途的示例结构,但这是一个很好的演示.
struct test {
    var x = 5
    var y = 5
    var number: Int {
        get {
            return x * y
        }
        set (newValue){
            x = newValue / 2
            y = newValue / 2
        }
    }
}

var s = test()
s.number //25
s.number = 100
s.x //50
s.number //2500

因此,正如您所看到的,变量数不是传统意义上的变量,它是计算属性.所以,当我调用s.number时,我得到了x和y的乘积.此外,您将使用该集来更改结构中的其他变量(而不是计算属性本身).因此,我根据newValue将x和y设置为不同的值.这个计算属性的概念可以用来代替函数,我发现这对于简化从函数中检索数据非常有用.例如,你可以有一个距离以千米为单位的结构,你可能会非常频繁地想要在几英里之内.因此,您可以使用get方法创建计算英里数的里程数,使用get方法计算公里数,如果您在程序中设置里程,则可以使用setter更改公里数.

现在,对于didSet和willSet.您可以使用这些来通知您的结构值更改.例如,averageTracker.

struct averageTracker {
    var total: Double = 0 {
        didSet {
            numEntries++
        }
    }
    var numEntries: Double = 0
    var average: Double {
        get {
            return total / numEntries
        }
    }
}


var ave = averageTracker()
ave.total += 10
ave.total += 20
ave.average //15

注意didSet实际上是如何包含一个值的变量,也就是说,它不是一个计算属性.此外,我使用计算属性平均值来获得平均值.总的来说,我希望我能清除你对Swift这个非常强大的方面的困惑.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读