Swift 从 didSet 调用委托

Swift calling delegate from didSet

我的 GameState class 有一个代表。每次使用 didSet 更改 playing:Bool 时,我都试图调用 gameStateUpdated 方法。我的代表一直收到 EXC_BAD_ACCESS。甚至检查它是否为零。 当设置 playing 时,我得到一个 EXC_BAD_ACCESS 并且我确信我的 delegate 不是零。

var stateDelegate:GameStateDelegate?
var playing = false {
    didSet {
        stateDelegate?.gameStateUpdated(self.playing)
    }
}

我知道我不想从计算的 属性 的 setter 中引用 self.playing。但这不应该是计算出来的 属性。

编辑

如果我使用 stateDelegate?stateDelegate!,也会发生同样的事情。我之前有可选的链接,但它没有用,所以我想我会尝试强制它。

如果问题与 ! 的使用无关,那么让我们在其他地方寻找问题。

也许无限递归

更具体地说 gameStateUpdated 里面发生了什么?事实上,如果此方法正在更改 playing 属性,则 didSet 会一次又一次地触发...

你可以很容易地检查这个,只需在didSet或下面的代码行中添加一个breakpoint

print("didSet called")

如果 didSet 被多次调用,那就是问题所在。