【问题标题】:Is there a way to get didSet to work when changing a property in a class?在更改类中的属性时,有没有办法让 didSet 工作?
【发布时间】:2015-06-09 19:34:16
【问题描述】:

我有一个带有属性观察器的类作为属性。如果我更改了该类中的某些内容,有没有办法触发 didSet,如示例所示:

class Foo {
    var items = [1,2,3,4,5]
    var number: Int = 0 {
        didSet {
            items += [number]
        }
    }
}

var test: Foo = Foo() {
    didSet {
        println("I want this to be printed after changing number in test")
    }
}

test.number = 1 // Nothing happens

【问题讨论】:

    标签: swift observers propertychanged didset


    【解决方案1】:

    没有任何反应,因为观察者位于test,这是一个 Foo 实例。但是您更改了test.number,而不是test 本身。 Foo 是一个类,一个类是一个引用类型,所以它的实例是可变的。

    如果您想查看日志消息,请将test本身设置为不同的值(例如,不同的Foo())。

    或者,将println 语句添加到其他 didSet,即您已经在 Foo 的number 属性上获得的语句。

    或者,使 Foo 成为结构而不是类;更改结构属性替换结构,因为结构是值类型,而不是引用类型。

    【讨论】:

    • 当然...有时我想打自己几个小时试图找到答案而我应该只使用一个结构...谢谢!
    • 您可能想看看我的书,我在其中总结了值类型与引用类型的行为之间的差异:apeth.com/swiftBook/ch04.html#SECreferenceTypesdidSet 对结构引用的响应结构的属性是我给出的第一个例子。
    猜你喜欢
    • 2012-05-10
    • 2016-10-18
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多