当前位置:  开发笔记 > IOS > 正文

如何从另一个类中观察类属性的变化

如何解决《如何从另一个类中观察类属性的变化》经验,为你挑选了1个好方法。

我有一个关于财产观察员的问题.下面是一些示例代码.我想要的是如果a.value被更改,属性Analysis.hasChanged将更新为true.有没有办法可以做到这一点?

class Number {
 var value: Double
 init(numberValue: Double) {
  self.value = NumberValue
 }
}

class Analysis {
 var a: Number
 var hasChanged = false
 init(inputNumber: Number) {
  self.a = inputNumber
 }
}

testNumber = Number(numberValue: 4)
testAnalysis = Analysis(inputNumber: testNumber)
print(testAnalysis.hasChanged) // will print "false"
testNumber.value = 10
print(testAnalysis.hasChanged) // will still print "false", but I want it to print "true"

最后,我希望用户能够在他们的任何分析使用已更改的数字时收到通知,以便他们可以在选择时更新分析结果.



1> 小智..:

您可以使用Swift提供的内置属性观察器.每次设置新值时,都会调用didSet.您只需要将包含所需行为的闭包附加到Number类

class Number {

    var valueDidChangeClosure: (()->())?
    var value: Double {
        didSet {

            //won't call the valueDidChangeClosure 
            //if the value was changed from 10 to 10 for example.. 

            if oldValue != value {
                valueDidChangeClosure?()
            }  
        }
    }
    init(numberValue: Double) {
        self.value = numberValue
    }
}

class Analysis {
    var a: Number
    var hasChanged = false
    init(inputNumber: Number) {
        self.a = inputNumber
        self.a.valueDidChangeClosure = {
            self.hasChanged = true
        }
    }
}

let testNumber = Number(numberValue: 4)
let testAnalysis = Analysis(inputNumber: testNumber)

print(testAnalysis.hasChanged) // will print "false"
testNumber.value = 10
print(testAnalysis.hasChanged) // will print "true"

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有