首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在init时迅速触发didSet

在init时迅速触发didSet
EN

Stack Overflow用户
提问于 2016-05-25 10:28:44
回答 2查看 2.2K关注 0票数 3

为什么这段代码在init时会触发didSet

代码语言:javascript
复制
final public class TestDidSet {

static var _shared: TestDidSet! = TestDidSet()

func testA() { }

private var test = true {
    didSet {
        print("didSet test when initing!!!!!:\(test)")
    }
}
private var _value: Bool! {
    didSet {
        print("didSet when initing!!!!!:\(_value)")
    }
}

private init() {
    testSet()
    _value = false
    test = false
}

private func testSet() {
    _value = true
}
}

TestDidSet._shared.testA()

知道吗?它不应该触发didSet吗?救命啊!

更新:我的观点是,testSet()_value = false在做同样的事情,但是testSet()init()之外,所以testSet()会触发didSet,而_value = false不会触发didSet。为什么?!

我想,不是可选的类型或其他原因造成的。

EN

回答 2

Stack Overflow用户

发布于 2016-05-25 10:55:26

当您使用隐式未包装的可选类型(在本例中为Bool!)声明属性时,它将被隐式分配为nil的默认值。然后,如果使用初始化器中的其他值为其赋值,则会触发didSet观察者,因为它已经是第二个赋值。didSet不应该只在第一次触发。

票数 1
EN

Stack Overflow用户

发布于 2016-05-25 12:02:43

didSet{}闭包每次为属性分配一个新值时都称为(即使在声明(内联)或初始化时也是如此)。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37434418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档