gpt4 book ai didi

swift - 为属性设置相同的值是否仍然调用 willSet 和 didSet?

转载 作者:IT王子 更新时间:2023-10-29 05:29:29 26 4
gpt4 key购买 nike

如果我将属性值设置为与当前设置相同的值,会调用 willSet 和 didSet 吗?当您在这些功能中出现副作用时,了解这一点很重要。

最佳答案

是的,即使设置为相同的值,willSet 和 didSet 也会被调用。我在 Playground 上测试了它:

class Class1 {
var willSetCount = 0
var didSetCount = 0
var var1: String = "A" {
willSet {
willSetCount++
}
didSet {
didSetCount++
}
}
}

let aClass1 = Class1() // {0 0 "A"}
aClass1.var1 = "A" // {1 1 "A"}
aClass1.var1 = "A" // {2 2 "A"}

如果要防止设置相同值时发生副作用,可以将值与newValue/oldValue进行比较:

class Class2 {
var willSetCount = 0
var didSetCount = 0
var var1: String = "A" {
willSet {
if newValue != var1 {
willSetCount++
}
}
didSet {
if oldValue != var1 {
didSetCount++
}
}
}
}

let aClass2 = Class2() // {0 0 "A"}
aClass2.var1 = "A" // {0 0 "A"}
aClass2.var1 = "B" // {1 1 "B"}

关于swift - 为属性设置相同的值是否仍然调用 willSet 和 didSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25553476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com