gpt4 book ai didi

Swift:如何在不调用其 didSet 函数的情况下更改属性的值

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

如何在 Swift 中设置一个属性的值,而不用在初始化上下文之外调用它的 didSet() 函数?下面的代码是在类的 noside() 函数

中实现此目的的失败实验
class Test
{
var toggle : Bool = 0
var hoodwink : Int = 0 {
didSet(hoodwink)
{
toggle = !toggle
}
}

// failed attempt to set without a side effect

func noside(newValue : Int)
{
hoodwink = newValue
println("hoodwink: \(hoodwink) state: \(toggle)")
}

func withside(newValue : Int)
{
self.hoodwink = newValue
println("hoodwink: \(hoodwink) state: \(toggle)")
}
}

在 Objective-C 中使用自动合成的属性是很简单的:

有副作用(如果存在于 setter 中):

self.hoodwink = newValue;

无副作用:

_hoodwink = newValue;

最佳答案

一个可能的破解方法是提供一个绕过 didSet 的 setter

 var dontTriggerObservers:Bool = false
var selectedIndexPath:NSIndexPath? {
didSet {
if(dontTriggerObservers == false){
//blah blah things to do
}
}
}
var primitiveSetSelectedIndexPath:NSIndexPath? {
didSet(indexPath) {
dontTriggerObservers = true
selectedIndexPath = indexPath
dontTriggerObservers = false
}
}

丑陋但可行

关于Swift:如何在不调用其 didSet 函数的情况下更改属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25394194/

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